پرسش

چطور یک کلاس را قابل سریال‌سازی در JSON کنیم؟

How to make a class JSON serializable?

چطور میتونم یه شی از کلاس رو به فرم json دربیارم؟

1403/06/03
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

برای اینکه یک کلاس رو قابل سریال‌سازی به JSON کنی، باید کاری کنی که پایتون بفهمه چطور باید اشیای اون کلاس رو به فرمت JSON تبدیل کنه. برای این کار می‌تونی از یک متد به اسم default در کتابخونه json استفاده کنی.

مثال:

import json
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def to_dict(self):
        return {
            'name': self.name,
            'age': self.age
        }
def my_class_json_encoder(obj):
    if isinstance(obj, MyClass):
        return obj.to_dict()
    raise TypeError(f"Object of type {type(obj).__name__} is not JSON serializable")
my_object = MyClass("Ali", 30)
json_str = json.dumps(my_object, default=my_class_json_encoder)
print(json_str)

- اول از همه، یه کلاس به اسم MyClass داریم که شامل دو ویژگی name و age هست.

- بعدش، یه متد به اسم to_dict داریم که این ویژگی‌ها رو به یه دیکشنری تبدیل می‌کنه.

- بعدش هم یه تابع داریم به اسم my_class_json_encoder که این تابع چک می‌کنه اگه شیء از نوع MyClass بود، از متد to_dict برای تبدیلش به دیکشنری استفاده کنه. اگه نبود، یه خطا می‌ندازه.

- آخرش هم از json.dumps استفاده می‌کنیم که با کمک تابع my_class_json_encoder شیء رو به فرمت JSON تبدیل کنه.

نکته: اگه شیء کلاس تو شامل اشیای دیگه هم باشه که خودشون نیاز به سریال‌سازی دارن، باید این فرآیند رو برای اون‌ها هم پیاده کنی.

پاسخ: 1403/06/03
آخرین آپدیت: 1403/07/30