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
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.
Referensi pintasan papan ketik
Cari pintasan bawaan terdokumentasi untuk VS Code, Chrome, dan Bash dengan GNU Readline di macOS, Windows, dan Linux.
Generator EditorConfig
Buat file .editorconfig dengan gaya dan ukuran indentasi, akhir baris, charset, dan aturan spasi Anda untuk format yang konsisten di berbagai IDE dan editor.
Validator Email
Validasi alamat email: pemeriksaan sintaks RFC 5322, pengecekan live record MX, serta detail bagian lokal, domain, dan panjang. Tidak ada email yang dikirim.
Pemformat HTML
Format HTML secara lokal di browser dengan inden dua atau empat spasi. HTML tidak diunggah atau divalidasi.
Alat ini tersedia dalam bahasa lain
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON till Python-dataklass [SV]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON do klasy danych w Pythonie [PL]
- JSON zu Python Dataclass [DE]
- JSON vers Dataclass Python [FR]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- JSON naar Python-dataclass [NL]
- JSONからPythonデータクラスへの変換 [JA]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON para Dataclass em Python [PT]
- JSON a Dataclass de Python [ES]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- 从 JSON 到 Python 数据类 [ZH]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]