"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني جعل كائنات مخصصة json قابلة للتسلسل باستخدام المشفر الافتراضي في بيثون؟

كيف يمكنني جعل كائنات مخصصة json قابلة للتسلسل باستخدام المشفر الافتراضي في بيثون؟

نشر في 2025-03-25
تصفح:630

How can I make custom objects JSON serializable using the default encoder in Python?

جعل الكائنات JSON قابلة للتسلسل مع المشفر الافتراضي

الطريقة الافتراضية لتسلسل الكائنات المخصصة ، غير القابلة للاستيعاب إلى JSON ، تتضمن تصنيف JSON.JSONENCODER وتنقل العرف المخصص إلى json.dumps (). ينتج عن هذا عادةً رمزًا يشبه هذا:

Def Default (Self ، OBJ): إذا كان isinstance (OBJ ، FOO): إرجاع OBJ.TO_JSON () إرجاع json.jsonencoder.default (Self ، OBJ) print (json.dumps (obj ، cls = customencoder))
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Foo):
            return obj.to_json()

        return json.JSONEncoder.default(self, obj)

print(json.dumps(obj, cls=CustomEncoder))

باستخدام قرد الترميز الافتراضي

على الرغم من القيود المفروضة على وحدة JSON ، من الممكن تحقيق الوظيفة المطلوبة من خلال تقنية تسمى قردة. يتضمن ذلك تعديل السلوك الافتراضي لوحدة JSON عن طريق استبدال طريقة الافتراضية (). توضح الوحدة المستقلة التالية كيفية تنفيذ هذا القرد:

استيراد JSON def _default (Self ، OBJ): إرجاع getAttr (obj .__ class__ ، "to_json" ، _default.default) (OBJ) _default.default = jsonencoder.default jsonencoder.default = _default

لاستخدام هذه الوحدة المغطاة بالقرد ، ما عليك سوى استيرادها ، وسوف يطبق التغييرات تلقائيًا على وحدة JSON. سيقوم jsonencoder بالتحقق من هذه الطريقة ويستخدم قيمة الإرجاع الخاصة به للتسلسل. هذا يتجنب الحاجة إلى أساليب TO_JSON الصريحة. من خلال تجاوز الطريقة الافتراضية () لمخلل كائنات Python التي ليست أنواع JSON القياسية ، يمكنك تحقيق التسلسل دون الحاجة إلى طرق فئة خاصة.
import json

def _default(self, obj):
    return getattr(obj.__class__, "to_json", _default.default)(obj)

_default.default = JSONEncoder.default
JSONEncoder.default = _default
يمكن لهذه الوظيفة اكتشاف مفتاح "_python_object" أثناء التسلسل واستخدامه لإعادة بناء الكائن الأصلي باستخدام Pickle.loads ().

يسمح نهج المخلل بالتسلسل التلقائي لمعظم كائنات Python ، مما يجعله حلاً أكثر تعميمًا.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3