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.
Telefoonnummers controleren
Controleer de structuur van telefoonnummers per land en bekijk regio, type en E.164-, internationale, nationale en RFC 3966-notatie.
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.
Decimaal naar hexadecimaal converter
Voer een decimaal geheel getal in en ontvang direct de hexadecimale waarde, inclusief negatieve waarden als 64-bits tweecomplement.
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.
Tool beschikbaar in andere talen
- JSON do klasy danych w Pythonie [PL]
- JSON ke Dataclass Python [ID]
- JSON a Dataclass de Python [ES]
- JSON vers Dataclass Python [FR]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSONからPythonデータクラスへの変換 [JA]
- JSON till Python-dataklass [SV]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- 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]