سطح مقدماتی (Beginner Level)
فرمت JSON (JavaScript Object Notation) یکی از محبوبترین روشها برای ذخیره و انتقال دادهها است. پایتون به صورت پیشفرض ماژولی به نام json دارد که به ما اجازه میدهد دادههای پایتونی را به JSON تبدیل کرده و برعکس عمل کنیم.
در این سطح یاد میگیریم چطور دادهها را بین فرمت پایتون و رشتههای متنی JSON جابجا کنیم و چگونه با فایلهای .json کار کنیم.
۱. تبدیل پایتون به JSON (Serialization)
برای تبدیل یک شیء پایتونی (مثل دیکشنری یا لیست) به یک رشتهی متنی با فرمت JSON، از متد json.dumps() استفاده میکنیم. به این فرآیند Serialization یا Encoding میگویند.
جدول تبدیل نوع دادهها به صورت زیر است:
dict$\rightarrow$Objectlist/tuple$\rightarrow$Arraystr$\rightarrow$Stringint/float$\rightarrow$NumberTrue/False$\rightarrow$true/falseNone$\rightarrow$null
مثال اول: تبدیل دیکشنری ساده
در این مثال یک دیکشنری ساده پایتون را به رشته JSON تبدیل میکنیم.
مثال دوم: تبدیل لیست و انواع دادههای مختلف
در اینجا لیستی شامل مقادیر None و اعداد اعشاری را تبدیل میکنیم تا ببینیم در JSON چگونه نمایش داده میشوند.
۲. تبدیل JSON به پایتون (Deserialization)
برای تبدیل یک رشتهی JSON (که معمولاً از وب یا فایل دریافت شده) به شیء پایتونی، از متد json.loads() استفاده میکنیم.
مثال اول: تبدیل رشته به دیکشنری
مثال دوم: مدیریت آرایههای JSON
آرایههای JSON در پایتون به list تبدیل میشوند.
۳. کار با فایلهای JSON
علاوه بر کار با رشتهها (dumps و loads)، ما توابع dump و load (بدون s) را داریم که مستقیماً با فایلها کار میکنند.
مثال اول: نوشتن در فایل (json.dump)
مثال دوم: خواندن از فایل (json.load)
سطح پیشرفته (Professional Level)
در پروژههای واقعی، صرفاً تبدیل دادهها کافی نیست. ما نیاز به فرمتدهی زیبا، مدیریت انکودینگ زبان فارسی، و سریالسازی اشیاء پیچیده (مثل کلاسهای سفارشی) داریم.

۱. فرمتدهی و زبان فارسی
به صورت پیشفرض json.dumps کاراکترهای غیر ASCII (مثل فارسی) را به کد یونیکد (مثلاً \u0633) تبدیل میکند. همچنین خروجی آن فشرده و در یک خط است.
برای حل این مشکلات از پارامترهای زیر استفاده میکنیم:
ensure_ascii=False: برای نمایش صحیح حروف فارسی.indent=4: برای توگذاری و خوانایی کد.sort_keys=True: برای مرتبسازی کلیدها بر اساس حروف الفبا.
مثال: ایجاد JSON خوانا و فارسی
۲. سریالسازی اشیاء سفارشی (Custom Objects)
ماژول json به طور پیشفرض نمیداند چگونه یک آبجکت از کلاس (Class) شما را تبدیل کند و خطای TypeError میدهد. برای حل این مشکل دو راه داریم.
راه حل اول: استفاده از پارامتر default
میتوانیم یک تابع بنویسیم که آبجکت را گرفته و آن را به فرمت دیکشنری برگرداند.
# Static: تعریف کلاس و تابع کمکی
class User:
def __init__(self, name, age):
self.name = name
self.age = age
def encode_user(obj):
if isinstance(obj, User):
return {"name": obj.name, "age": obj.age, "__type__": "User"}
raise TypeError(f"Object of type {type(obj)} is not JSON serializable")
راه حل دوم: ارثبری از JSONEncoder
روشی حرفهایتر برای پروژههای بزرگ، ساختن کلاس Encoder اختصاصی است.
۳. دیکد کردن سفارشی (object_hook)
هنگام تبدیل JSON به پایتون، اگر بخواهیم دادهها مستقیماً به یک کلاس تبدیل شوند (نه دیکشنری)، از object_hook استفاده میکنیم.