JSON ke Dataclass Python

Lampirkan contoh JSON untuk memperoleh hasil berupa @dataclass (atau Pydantic BaseModel) yang mencakup petunjuk tipe untuk setiap bidang, str, int, float, bool, Optional[...], dan List[...] bila sesuai. Objek terstruktur menjadi kelas data tersendiri. Hasil keluaran dalam format PEP 8 dan siap digunakan langsung dalam file Python.

Cara mengonversi JSON menjadi dataclass

  1. 1

    Lampirkan JSON

    Satu sampel sudah cukup; penggunaan beberapa sampel meningkatkan kemampuan mendeteksi bidang mana yang bisa bernilai null.

  2. 2

    Pilih gaya

    Pustaka standar `@dataclass`, Pydantic `BaseModel`, atau `TypedDict` untuk pemeriksaan tipe statis saja.

  3. 3

    Pilih versi Python

    3.9+ untuk sintaks `list[str]`, 3.10+ untuk tipe union `|`, dan 3.8 untuk `Optional[...]`/`List[...]`.

  4. 4

    Salin kode tersebut.

    Satu kelas akar ditambah kelas-kelas terstruktur di dalamnya. Tempelkan ke dalam file `.py` lalu impor.

Contoh hasil: standar @dataclass

Masukan:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Hasil (Python 3.10+):

from dataclasses import dataclass, field
from typing import Optional


@dataclass
class User:
    first_name: str
    age: int
    tags: list[str] = field(default_factory=list)
    email: Optional[str] = None

Masukan yang sama menggunakan Pydantic

from typing import Optional
from pydantic import BaseModel


class User(BaseModel):
    first_name: str
    age: int
    email: Optional[str] = None
    tags: list[str] = []

Pemetaan Tipe

Nilai JSON Tipe Python
string str
bilangan bulat int
nomor (desimal) float
boolean bool
null (dilihat secara terpisah) None
null + tipe lain Optional[T]
String tanggal ISO date (Python 3.7+)
Tanggal dan Waktu ISO datetime
array dari satu jenis list[T]
matriks campuran list[Union[T1, T2]]
objek kelas tersarang

Dataclass vs Pydantic vs TypedDict

Varian Kapan harus digunakan
@dataclass Solusi pustaka standar, tanpa validasi saat eksekusi
Pydantic Validasi dan pemaksaan selama eksekusi (FastAPI, pengaturan)
TypedDict Hanya pemeriksaan tipe statis, tidak mencakup kelas instansi
attrs Proyek-proyek lama yang telah distandarisasi menggunakan attrs

Kesalahan Umum

  • Lupa menggunakan default_factory untuk nilai default yang dapat diubah. Nilai default list[str] = [] merupakan jebakan dataclass (dibagikan antar instansi); gunakan field(default_factory=list).
  • Optional tanpa nilai default. email: Optional[str] tanpa = None tetap memerlukan argumen tersebut. Sesuaikan dengan semantik JSON Anda.
  • Pydantic v1 versus v2. Sintaks dan perilaku berbeda (kelas Config dibandingkan dengan model_config, serta validator dibandingkan dengan field_validator). Generator secara default menggunakan versi v2.
  • Urutan tipe dalam union penting untuk deserialisasi. Pydantic memeriksa tipe sesuai urutan deklarasi; jika terdapat ambiguitas, sebutkan tipe yang paling spesifik terlebih dahulu (misalnya int sebelum str).

Pertanyaan yang Sering Diajukan

Dataclass untuk objek bernilai sederhana tanpa validasi. Pydantic digunakan saat Anda memerlukan validasi saat eksekusi, pemaksaan tipe, atau integrasi dengan FastAPI. TypedDict digunakan ketika Anda hanya membutuhkan pemeriksaan tipe statis (seperti dalam mypy dan pyright) dan tidak ingin menggunakan instansi kelas.

Tidak cocok untuk Python 3.10+ karena sintaks | dan list[str] merupakan sintaks bawaan. Sangat berguna bagi proyek versi 3.7–3.9 untuk menggunakan sintaks terbaru melalui anotasi string menurut PEP 563. Generator akan memberikan peringatan ketika diperlukan.

Setiap objek terletak di dalam objek lainnya menjadi kelas tersendiri. Kelas akar merujuk pada objek-objek tersebut berdasarkan nama, sehingga Anda dapat menggunakan tipe data secara ulang. Referensi siklik akan dideteksi dan ditandai.

Ya, jika Anda memilih versi Pydantic. FastAPI menggunakan model Pydantic sebagai tipe permintaan/respons secara langsung. Untuk pengolahan data internal, @dataclass memiliki bobot yang lebih ringan.

Alat Terkait

Alat ini tersedia dalam bahasa lain