Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengatasi Had Pensirilan JSON Lalai dengan Kaedah Tersuai?

Bagaimana untuk Mengatasi Had Pensirilan JSON Lalai dengan Kaedah Tersuai?

Patricia Arquette
Patricia Arquetteasal
2024-10-31 03:46:31665semak imbas

How to Overcome Default JSON Serialization Limitations with Custom Methods?

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 '{&quot;name&quot;: &quot;%s&quot;}' % 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn