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
Lampirkan JSON
Satu sampel sudah cukup; penggunaan beberapa sampel meningkatkan kemampuan mendeteksi bidang mana yang bisa bernilai null.
-
2
Pilih gaya
Pustaka standar `@dataclass`, Pydantic `BaseModel`, atau `TypedDict` untuk pemeriksaan tipe statis saja.
-
3
Pilih versi Python
3.9+ untuk sintaks `list[str]`, 3.10+ untuk tipe union `|`, dan 3.8 untuk `Optional[...]`/`List[...]`.
-
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_factoryuntuk nilai default yang dapat diubah. Nilai defaultlist[str] = []merupakan jebakan dataclass (dibagikan antar instansi); gunakanfield(default_factory=list). - Optional tanpa nilai default.
email: Optional[str]tanpa= Nonetetap memerlukan argumen tersebut. Sesuaikan dengan semantik JSON Anda. - Pydantic v1 versus v2. Sintaks dan perilaku berbeda (kelas
Configdibandingkan denganmodel_config, sertavalidatordibandingkan denganfield_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
intsebelumstr).
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
Generator Konfigurasi Webpack
Buat webpack.config.js untuk webpack 5 bagi JavaScript biasa, React, atau Vue: TypeScript, Babel, CSS atau Sass, gambar, HtmlWebpackPlugin, server pengembangan, dan baris npm install.
Referensi Tabel ASCII
Tabel ASCII lengkap dari 0 sampai 127 dengan desimal, heksadesimal, oktal, biner, dan referensi karakter numerik HTML untuk setiap karakter, termasuk kode kontrol seperti NUL, LF, dan DEL.
Referensi Karakter HTML
Daftar entitas HTML yang dapat dicari, beserta kode bernama dan kode numeriknya, serta fitur salin dengan satu klik untuk karakter khusus dan simbol.
Validator XSD
Validasi dokumen XML terhadap skema XSD dan laporkan ketidakcocokan elemen dan tipe dengan nomor baris persis.
Dekoder Protocol Buffers
Dekode byte wire-format Protobuf secara lokal dari hex, Base64, Base64URL, teks, atau file; periksa kandidat field yang tepat dan ekspor laporan privat.
XML Formatter
Pretty-print dokumen XML dengan indentasi konsisten dan tangkap kesalahan well-formedness lengkap dengan nomor baris persis.
Alat ini tersedia dalam bahasa lain
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON a Dataclass de Python [ES]
- JSON zu Python Dataclass [DE]
- JSON do klasy danych w Pythonie [PL]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON vers Dataclass Python [FR]
- JSONからPythonデータクラスへの変換 [JA]
- JSON naar Python-dataclass [NL]
- JSON till Python-dataklass [SV]
- JSON para Dataclass em Python [PT]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]