Mengendalikan Jenis Non-JSON Serializable dalam JSON Serialization
Masalah:
Mengekod set Python yang mengandungi tersuai objek dengan cincang dan eq menimbulkan TypeError dalam kaedah json.dumps.
Pengekod Tersuai untuk Set:
Anda boleh mencipta pengekod tersuai yang mengendalikan set dengan menukarkannya kepada senarai sebelum pengekodan:
<code class="python">import json class SetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return json.JSONEncoder.default(self, obj)</code>
Mengendalikan Jenis Bersarang dan Kompleks:
Untuk menyesuaikan cara jenis bersarang dan kompleks dikodkan, anda boleh mengatasi kaedah lalai dalam pengekod anda untuk mengambil kira pelbagai jenis data. Contohnya, untuk mengendalikan tarikh, anda boleh menggunakan ini:
<code class="python">class CustomEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime.datetime): return obj.isoformat() return json.JSONEncoder.default(self, obj)</code>
Mengendalikan Penukaran Kunci-ke-Nilai:
Kaedah lalai dalam JSONEncoder menggunakan penukaran yang anda tentukan semua nilai dalam objek. Ia tidak membezakan antara kunci dan nilai. Oleh itu, anda perlu melaksanakan logik dalam pengekod tersuai anda untuk mengendalikan penukaran kunci kepada nilai secara eksplisit.
Contoh untuk Objek Bersarang:
Untuk mengendalikan objek bersarang, anda boleh secara rekursif memanggil proses bersiri pada nilai mereka. Sebagai contoh, untuk mengendalikan set bersarang, anda boleh melakukan ini:
<code class="python">class NestedSetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) if isinstance(obj, dict): return {key: NestedSetEncoder().encode(value) for key, value in obj.items()} return json.JSONEncoder.default(self, obj)</code>
Dengan memanjangkan JSONEncoder dan mengatasi kaedah lalai untuk mengendalikan jenis data tertentu, anda boleh menyesuaikan proses siri JSON untuk menampung pelbagai kompleks dan bukan -jenis standard.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Jenis Non-JSON Serializable dalam Python JSON Serialization?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!