JSON zu Python Dataclass

Fügen Sie ein JSON-Beispiel ein und erhalten Sie eine @dataclass (oder Pydantic BaseModel) mit Typ-Hinweisen für jedes Feld, str, int, float, bool, Optional[...] und List[...], wo es angebracht ist. Verschachtelte Objekte werden zu eigenen Dataclasses. Die Ausgabe ist PEP 8-formatiert und bereit zum Einfügen in eine Python-Datei.

So konvertieren Sie JSON in eine Dataclass

  1. 1

    Fügen Sie das JSON ein

    Ein einzelnes Beispiel funktioniert; mehrere Beispiele verbessern die Nullwert-Erkennung.

  2. 2

    Wählen Sie den Stil

    Standardbibliothek `@dataclass`, Pydantic `BaseModel` oder `TypedDict` nur für statische Typüberprüfung.

  3. 3

    Wählen Sie die Python-Version

    3.9+ für `list[str]`-Syntax, 3.10+ für `|`-Unionstypen, 3.8 für `Optional[...]` / `List[...]`.

  4. 4

    Kopieren Sie den Code

    Eine Hauptklasse plus verschachtelte. In eine `.py`-Datei einfügen und importieren.

Beispielausgabe: standardmäßige @dataclass

Eingabe:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Ausgabe (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

Dieselbe Eingabe mit Pydantic

from typing import Optional
from pydantic import BaseModel


class User(BaseModel):
    first_name: str
    age: int
    email: Optional[str] = None
    tags: list[str] = []

Typzuordnung

JSON-Wert Python-Typ
Zeichenfolge str
Ganzzahl int
Zahl (dezimal) float
Boolescher Wert bool
null (allein gesehen) None
null + anderer Typ Optional[T]
ISO-Datumszeichen date (Python 3.7+)
ISO-Datum und Uhrzeit datetime
Array eines Typs list[T]
gemischtes Array list[Union[T1, T2]]
Objekt Verschachtelte Klasse

Dataclass vs Pydantic vs TypedDict

Variante Wann zu verwenden
@dataclass Standardbibliothekslösung, keine Laufzeitvalidierung
Pydantic Laufzeitvalidierung und -konvertierung (FastAPI, Einstellungen)
TypedDict Nur statische Typüberprüfung, keine Instanzklasse
attrs Legacy-Projekte, die auf attrs standardisiert sind

Häufige Fehler

  • default_factory für veränderliche Standardwerte vergessen. Ein list[str] = [] Standard ist eine Falle für Dataclasses (wird zwischen Instanzen geteilt). Verwenden Sie field(default_factory=list).
  • Optional ohne Standard. email: Optional[str] ohne = None erfordert immer noch das Argument. Passen Sie Ihre JSON-Semantik an.
  • Pydantic v1 vs v2. Syntax und Verhalten unterscheiden sich (Klasse Config vs model_config, validator vs field_validator). Der Generator verwendet standardmäßig v2.
  • Die Reihenfolge der Union ist für die Deserialisierung wichtig. Pydantic versucht Typen in der Deklarationsreihenfolge. Setzen Sie den spezifischsten zuerst (z. B. int vor str), wenn Mehrdeutigkeit möglich ist.

Häufig gestellte Fragen

Dataclass für einfache Wertträger ohne Validierung. Pydantic, wenn Sie Laufzeitvalidierung, -konvertierung oder FastAPI-Integration wünschen. TypedDict, wenn Sie nur statische Typüberprüfung (mypy, pyright) benötigen und keine Klasseninstanzen möchten.

Nicht für Python 3.10+, wo |-Unionen und list[str]-Syntax nativ sind. Nützlich für Projekte in 3.7-3.9, um die neuere Syntax über PEP 563-String-Anmerkungen zu verwenden. Der Generator warnt, wenn es benötigt wird.

Jedes verschachtelte Objekt wird zu seiner eigenen Klasse. Die Hauptklasse verweist sie nach Namen, sodass Sie Typen wiederverwenden können. Zirkuläre Verweise werden erkannt und markiert.

Ja, wenn Sie die Pydantic-Variante wählen. FastAPI verwendet Pydantic-Modelle direkt als Anfrage-/Antworttypen. Für interne Datenverschiebungen ist @dataclass leichter.

Verwandte Tools

Tool in anderen Sprachen verfügbar