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. 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. 2

    Välj stil

    Standardbiblioteket `@dataclass`, Pydantic `BaseModel` eller `TypedDict` för endast statisk typkontroll.

  3. 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. 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_factory för variabla standardvärden. Ett standardvärde för list[str] = [] är en dataklassfälla (delad mellan instanser). Använd istället field(default_factory=list).
  • Valfritt utan standardinställning. email: Optional[str] utan = None kräver fortfarande argumentet. Anpass det till din JSON-semantik.
  • Pydantic v1 jämfört med v2: Syntaxen och beteendet skiljer sig (klasserna Config jämfört med model_config, samt validator jämfört med field_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. int innan str) 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

Verktyget finns på andra språk