


Bagaimanakah saya boleh membuat objek tersuai JSON boleh bersiri menggunakan pengekod lalai dalam Python?
Menjadikan Objek JSON Boleh Diseri dengan Pengekod Lalai
Kaedah lalai untuk mensiri objek tersuai, tidak boleh bersiri kepada JSON melibatkan subkelas json.JSONEncoder dan menghantar pengekod tersuai kepada json.dumps(). Ini biasanya menghasilkan kod yang kelihatan seperti ini:
<code class="python">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))</code>
Walau bagaimanapun, bagaimana jika anda ingin menjadikan objek boleh bersiri menggunakan pengekod lalai? Malangnya, tiada penyelesaian mudah yang ditawarkan oleh modul json.
Menggunakan Monkey-Patching untuk Pengekodan Lalai
Walaupun terdapat batasan modul json, adalah mungkin untuk mencapai kefungsian yang diingini melalui teknik yang dipanggil tampalan monyet. Ini melibatkan pengubahsuaian kelakuan lalai modul json dengan menggantikan kaedah lalai()nya.
Dengan mencipta modul yang mengubah suai kaedah JSONEncoder.default(), semua operasi bersiri JSON berikutnya akan terjejas, kerana modul adalah dicache dalam sys.modules. Modul kendiri berikut menunjukkan cara untuk melaksanakan tampalan monyet ini:
<code class="python">import json def _default(self, obj): return getattr(obj.__class__, "to_json", _default.default)(obj) _default.default = JSONEncoder.default JSONEncoder.default = _default</code>
Untuk menggunakan modul tampalan monyet ini, hanya importnya dan ia akan menggunakan perubahan secara automatik pada modul json.
Menambah Kaedah Khas untuk Pensirian Objek
Untuk mendayakan pensirilan JSON automatik bagi kelas tersuai anda, anda boleh menentukan kaedah khas yang dipanggil __json__ di dalamnya. JSONEncoder akan menyemak kaedah ini dan menggunakan nilai pulangannya untuk bersiri. Ini mengelakkan keperluan untuk kaedah to_json() yang eksplisit.
Menyerikan Objek Python dengan Pickle
Satu lagi pendekatan untuk bersiri automatik ialah menggunakan modul jeruk bersama-sama dengan JSONEncoder yang ditampal monyet. Dengan mengatasi kaedah lalai() untuk memetik objek Python yang bukan jenis JSON standard, anda boleh mencapai penyirian tanpa memerlukan kaedah kelas khas.
Penyahserilan dengan jeruk
Untuk membina semula Python asal objek daripada perwakilan JSON yang dihasilkan oleh siri berasaskan jeruk, anda boleh menyediakan fungsi object_hook tersuai semasa penyahserikatan. Fungsi ini boleh mengesan kekunci '_python_object' yang ditambahkan semasa penyirian dan menggunakannya untuk membina semula objek asal menggunakan pickle.loads().
Kesimpulan
Walaupun modul json tidak menyediakan langsung cara untuk menjadikan objek JSON boleh bersiri dengan pengekod lalai, adalah mungkin untuk mencapainya melalui tampalan monyet atau dengan menggunakan modul jeruk. Pendekatan acar membolehkan penyirian automatik kebanyakan objek Python, menjadikannya penyelesaian yang lebih umum.
Atas ialah kandungan terperinci Bagaimanakah saya boleh membuat objek tersuai JSON boleh bersiri menggunakan pengekod lalai dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django

Memperkenalkan Toolkit Bahasa Alam (NLTK)

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?
