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
Webpack-configuratiegenerator
Maak een webpack.config.js voor webpack 5 voor gewoon JavaScript, React of Vue: TypeScript, Babel, CSS of Sass, afbeeldingen, HtmlWebpackPlugin, een devserver en de npm install-regel.
SVG-golfgenerator
Genereer een vloeiende SVG-golfscheiding voor headers en footers met instelbare amplitude, frequentie, kleur en positie boven of onder. Kopieer de SVG-code.
Protocol Buffers-decoder
Decodeer Protobuf-bytes lokaal uit hex, Base64, Base64URL, tekst of een bestand, bekijk veldinterpretaties en exporteer een privérapport.
XSD-validator
Valideer een XML-document tegen een XSD-schema en rapporteer discrepanties tussen elementen en typen, inclusief de exacte regelnummers.
XML-formatter
Maak XML-documenten netjes op met consistente inspringing en spoor welgevormdheidsfouten op met exacte regelnummers.
XML naar JSON
Zet XML-documenten om naar schone JSON, waarbij attributen, tekstknopen en arrays waar nodig behouden blijven. Drie stijlen: compact, Badgerfish of letterlijk.
Tool beschikbaar in andere talen
- JSON vers Dataclass Python [FR]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- JSON till Python-dataklass [SV]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ke Dataclass Python [ID]
- JSON do klasy danych w Pythonie [PL]
- JSON a Dataclass de Python [ES]
- JSON para Dataclass em Python [PT]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- 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]