Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengatasi Had Pensirilan JSON Lalai dengan Kaedah Tersuai?
Mengatasi Pengehadan Pensiri Lalai dengan Kaedah Tersuai
Dalam penyiaran JSON lalai, menggunakan JSONEncoder terbina dalam selalunya merupakan pendekatan yang paling mudah. Walau bagaimanapun, untuk objek tersuai yang tidak diwarisi daripada jenis boleh bersiri, ia boleh mencabar.
Monkey-Patching the Default Encoder
Daripada mensubkelaskan JSONEncoder, kita boleh ubah suai tingkah lakunya dengan mengubah suai kaedah lalai menggunakan tampalan monyet. Ini membolehkan kami menambah logik khas yang menyemak kaedah to_json dalam objek dan menggunakannya untuk pengekodan jika tersedia.
Contoh: Menggunakan Kaedah Khas untuk Pensiri
<code class="python">import json # Module for monkey-patching def _default(self, obj): return getattr(obj.__class__, "to_json", _default.default)(obj) _default.default = JSONEncoder.default JSONEncoder.default = _default class Foo: def __init__(self, name): self.name = name def to_json(self): return '{"name": "%s"}' % self.name foo = Foo('sazpaz') json_str = json.dumps(foo)</code>
Pendekatan ini membolehkan kami menyerikan objek tersuai tanpa perlu melaksanakan pengekod tersuai.
Mengautomasikan Pensiri dengan Pickle
Untuk lebih fleksibiliti, kami boleh menggunakan modul jeruk sempena tampalan monyet. Dengan mencipta kaedah lalai tersuai yang mengambil jenis JSON bukan standard, kami boleh mensirikannya secara automatik.
<code class="python"># Module for pickle-based serialization from json import JSONEncoder import pickle def _default(self, obj): return {'_python_object': pickle.dumps(obj)} JSONEncoder.default = _default</code>
Ini membolehkan kami mensiri kelas yang ditentukan pengguna, termasuk struktur data yang rumit.
Nota: Untuk penyahserikatan, kami boleh menyediakan object_hook tersuai untuk membina semula objek Python daripada data jeruk.
Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Had Pensirilan JSON Lalai dengan Kaedah Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!