JSON till Python-dataklass
Klistra in ett JSON-exempel och få en @dataclass (eller Pydantic BaseModel) med typhänvisningar för varje fält – str, int, float, bool, Optional[...] och List[...] där det är lämpligt. Inbäddade objekt blir egna dataklasser. Utdata är i PEP 8-format och redo att klistras in i en Python-fil.
Så förvandlar du JSON till en dataclass
-
1
Klistra in JSON
Ett enda exempel räcker; flera exempel förbättrar förmågan att upptäcka vilka fält som kan vara null.
-
2
Välj stil
Standardbiblioteket `@dataclass`, Pydantic `BaseModel` eller `TypedDict` för endast statisk typkontroll.
-
3
Välj Python-version
3,9+ för syntaxen `list[str]`, 3,10+ för unionstyperna `|` samt 3,8 för `Optional[...]`/`List[...]`.
-
4
Kopiera koden
En grundklass samt inbäddade klasser. Klistra in i en `.py`-fil och importera.
Exempel på utdata: standard @dataclass
Inmatning:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Utdata (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
Samma inmatning med Pydantic
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
Typmappning
| JSON-värde | Python-typ |
|---|---|
| sträng | str |
| heltal | int |
| nummer (desimal) | float |
| booleskt värde | bool |
| null (endast när det ses) | None |
| null + annan typ | Optional[T] |
| ISO-datumsträng | date (Python 3.7+) |
| ISO-datum och tid | datetime |
| array av en typ | list[T] |
| blandad matris | list[Union[T1, T2]] |
| objekt | inbäddad klass |
Dataclass, Pydantic och TypedDict
| Variant | När den ska användas |
|---|---|
@dataclass |
Lösning från standardbiblioteket, utan validering under körning |
| Pydantic | Validering och tvångskonvertering under körning (FastAPI, inställningar) |
TypedDict |
Endast statisk typkontroll, ingen instansklass |
attrs |
Äldre projekt som standardiserades med attrs |
Vanliga misstag
- Glöm inte
default_factoryför variabla standardvärden. Ett standardvärde förlist[str] = []är en dataklassfälla (delad mellan instanser). Använd iställetfield(default_factory=list). - Valfritt utan standardinställning.
email: Optional[str]utan= Nonekräver fortfarande argumentet. Anpass det till din JSON-semantik. - Pydantic v1 jämfört med v2: Syntaxen och beteendet skiljer sig (klasserna
Configjämfört medmodel_config, samtvalidatorjämfört medfield_validator). Generatorn använder version v2 som standard. - Ordningen i unionerna är viktig för deserialisering. Pydantic prövar typerna i den ordning de anges. Sätt de mest specifika typerna först (t.ex.
intinnanstr) om tvetydighet kan uppstå.
Vanliga frågor
Dataclass för enkla värdesamlare utan validering. Pydantic när du vill ha validering under körning, tvångsomvandling eller FastAPI-integration. TypedDict när du endast behöver statisk typkontroll (mypy, pyright) och inte vill använda klassinstanser.
Inte för Python 3.10+ där unionerna | och syntaxen list[str] är inbyggda. Användbart för projekt med Python 3.7–3.9 för att använda den nyare syntaksen via PEP 563-strängannoteringar. Generatoren varnar när det behövs.
Varje inbäddad objekt blir en egen klass. Den grundläggande klassen refererar till dem via namn, så att du kan återanvända typer. Cirkulära referenser upptäcks och markeras.
Ja, om du väljer Pydantic-varianten använder FastAPI direkt Pydantic-modeller som begäran/svartyper. För intern dataöverföring är @dataclass mer lättviktig.
Relaterade verktyg
ASCII-tabellreferens
Full ASCII-tabell från 0 till 127 med decimal-, hex-, oktal- och binärvärden samt notation för numeriska HTML-referenser, inklusive NUL, LF och DEL.
HTML-teckenreferens
En sökbar lista över HTML-entiteter med deras namngivna och numeriska koder samt kopiering med ett klick för specialtecken och symboler.
Referens för kortkommandon
Sök dokumenterade standardkommandon för VS Code, Chrome och Bash med GNU Readline i macOS, Windows och Linux.
HTML-formaterare
Formatera HTML lokalt i webbläsaren med indrag på två eller fyra blanksteg. HTML laddas inte upp eller valideras.
E-postvalidator
Validera en e-postadress: RFC 5322-syntaxkontroll, live-slagning av MX-poster samt detaljer om lokal del, domän och längd. Ingen e-post skickas.
EditorConfig-generator
Generera en .editorconfig-fil med dina regler för indragsstil och -storlek, radslut, teckenuppsättning och blanksteg för enhetlig formatering i alla IDE:er och editorer.
Verktyget finns på andra språk
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON a Dataclass de Python [ES]
- JSON para Dataclass em Python [PT]
- فئة بيانات من JSON إلى بايثون [AR]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- JSON zu Python Dataclass [DE]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON vers Dataclass Python [FR]
- JSON ke Dataclass Python [ID]
- JSON do klasy danych w Pythonie [PL]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]