JSON naar Python-dataclass
Plak een JSON-voorbeeld en krijg een @dataclass (of Pydantic BaseModel) met typeaanduidingen voor elk veld, str, int, float, bool, Optional[...] en List[...] waar van toepassing. Geneste objecten worden hun eigen dataclasses. De uitvoer is in PEP 8-formaat en klaar om in een Python-bestand te worden geplakt.
Hoe je JSON omzet in een dataclass
-
1
Plak de JSON
Eén enkel voorbeeld volstaat; meerdere voorbeelden verbeteren de detectie van welke velden nullable kunnen zijn.
-
2
Kies een stijl
Standaardbibliotheek `@dataclass`, Pydantic `BaseModel` of `TypedDict` voor alleen statische typencontrole.
-
3
Kies de Python-versie
3,9+ voor de syntaxis van `list[str]`, 3,10+ voor de unietypen van `|`, en 3,8 voor `Optional[...]`/`List[...]`.
-
4
Kopieer de code
Een basisklasse met ingebedde klassen. Plak deze in een `.py`-bestand en importeer ze.
Voorbeelduitvoer: standaard @dataclass
Invoer:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Uitvoer (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
Dezelfde invoer met Pydantic
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
Type-mapping
| JSON-waarde | Python-type |
|---|---|
| string | str |
| gehele getal | int |
| nummer (decimaal) | float |
| booleaanse waarde | bool |
| null (alleen weergegeven) | None |
| null + andere type | Optional[T] |
| ISO-datumstring | date (Python 3.7+) |
| ISO-datum en tijd | datetime |
| array van één type | list[T] |
| gemengde matrix | list[Union[T1, T2]] |
| object | geneste klasse |
Dataclass versus Pydantic versus TypedDict
| Variant | Wanneer gebruiken |
|---|---|
@dataclass |
Oplossing uit de standaardbibliotheek, zonder validatie tijdens uitvoering |
| Pydantic | Validatie en coerceren tijdens uitvoering (FastAPI, instellingen) |
TypedDict |
Enkel statische typencontrole, geen instancieklassen |
attrs |
Legacyprojecten die zijn gestandaardiseerd naar attrs |
Veelvoorkomende fouten
default_factoryvergeten voor veranderlijke standaardwaarden. Een standaardwaardelist[str] = []is een valkuil voor dataclasses (wordt gedeeld tussen instanties). Gebruikfield(default_factory=list).- Optional zonder standaardwaarde.
email: Optional[str]zonder= Nonevereist nog steeds het argument. Stem dit af op de semantiek van uw JSON. - Pydantic v1 versus v2. De syntaxis en het gedrag verschillen (klasse
Configversusmodel_config,validatorversusfield_validator). De generator gebruikt standaard versie v2. - De volgorde in de union is belangrijk voor de deserialisatie. Pydantic probeert de typen in de declaratievolgorde; plaats daarom het meest specifieke type eerst (bijvoorbeeld
intvóórstr) als dubbelzinnigheid mogelijk is.
Veelgestelde vragen
Dataclass voor eenvoudige waardehouders zonder validatie. Pydantic wanneer u tijdens uitvoering validatie, coercentie of FastAPI-integratie nodig hebt. TypedDict wanneer u alleen statische typencontrole vereist (bijvoorbeeld met mypy of pyright) en geen klasseninstansen wilt gebruiken.
Niet nodig voor Python 3.10+, waar de |-unions en de list[str]-syntaxis native zijn. Handig voor projecten van versie 3.7 tot 3.9 om de nieuwere syntaxis te gebruiken via PEP 563-stringannotaties. De generator waarschuwt wanneer dit nodig is.
Elk geneste object vormt een eigen klasse. De wortelklasse verwijst naar deze objecten via hun namen, zodat typen kunnen worden hergebruikt. Cirkulaire referenties worden gedetecteerd en gemarkeerd.
Ja, als u de Pydantic-versie kiest: FastAPI gebruikt Pydantic-modellen rechtstreeks als type voor verzoeken en antwoorden. Voor interne gegevensverwerking is @dataclass lichter in ontwerp.
Gerelateerde tools
ASCII-tabelreferentie
Volledige ASCII-tabel van 0 tot 127 met decimale, hexadecimale, octale en binaire waarden en HTML-numerieke referentienotatie, inclusief control codes zoals NUL, LF en DEL.
HTML-tekenreferentie
Een doorzoekbare lijst met HTML-entiteiten, hun benoemde en numerieke codes, plus kopiëren met één klik voor speciale tekens en symbolen.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
E-mailvalidator
Valideer een e-mailadres: RFC 5322-syntaxcontrole, live MX-record-zoekopdracht, plus details over lokaal deel, domein en lengte. Er wordt geen e-mail verstuurd.
EditorConfig-generator
Genereer een .editorconfig-bestand met uw regels voor inspringstijl en -grootte, regeleinde, tekenset en witruimte voor consistente opmaak in alle IDE's en editors.
CSS-kaartgenerator
Maak de CSS voor een kaartcontainer: achtergrond, rand, hoekradius, binnenruimte en een zachte slagschaduw, met direct voorbeeld en copy-pastecode.
Tool beschikbaar in andere talen
- JSON a Dataclass de Python [ES]
- JSON till Python-dataklass [SV]
- JSON vers Dataclass Python [FR]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON ke Dataclass Python [ID]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSONからPythonデータクラスへの変換 [JA]
- JSON zu Python Dataclass [DE]
- JSON do klasy danych w Pythonie [PL]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON para Dataclass em Python [PT]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]