Bagaimana untuk Mengendalikan Jenis Non-JSON Serializable dalam Python JSON Serialization?

Mary-Kate Olsen
Lepaskan: 2024-10-25 00:28:30
asal
204 orang telah melayarinya

How to Handle Non-JSON Serializable Types in Python JSON Serialization?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!