100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in Python — Pydantic, dataclass oder TypedDict

Ein JSON-Beispiel in Python-Klassen verwandeln. Wählen Sie den Stil, den Ihr Projekt ohnehin nutzt, und fügen Sie das Ergebnis direkt in models.py ein.

Sofort Privat Null Cookies
Stil

JSON-Eingabe

Python-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe werden Python-Klassen, eine je Objekt.

{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
from pydantic import BaseModel, Field


class Address(BaseModel):
    city: str


class Root(BaseModel):
    id: int
    first_name: str = Field(alias="firstName")
    address: Address

Die Kinder werden zuerst deklariert: eine Klasse muss da sein, bevor eine andere ein Feld mit ihr annotiert. Die Ausgabe zielt auf modernes Python — list[str] und int | str stehen direkt da, was 3.10 oder neuer verlangt.

Drei Stile, drei verschiedene Preise

Stilwas er Ihnen gibtwas er kostet
PydanticPrüfung an der Grenze, Aliasse für umbenannte Schlüsseleine Abhängigkeit und Objekte, die nicht schlicht sind
dataclassein einfacher Behälter, nur Standardbibliothekkeine Prüfung und kein Alias für einen umbenannten Schlüssel
TypedDictAnnotationen für die Dictionaries, die Sie schon habennichts zur Laufzeit — und damit auch keine Kontrolle

Die Struktur ist in allen dreien gleich; es ändert sich, wie viel der Typ für Sie tut.

Schlüsselwörter zerbrechen die Datei nicht mehr

{"class": 1} ergab:

class Root(BaseModel):
    class: int

was kein Python ist — die Datei parst nicht einmal. Schlüsselwörter bekommen nun einen Unterstrich, und der Pydantic-Alias behält den Schlüssel:

    class_: int = Field(alias="class")

Ein echter Fehler, beim Schreiben dieser Seite gefunden und behoben. TypedDict löst es anders: ein Schlüssel, der kein Attributname sein kann, schaltet die ganze Definition auf die funktionale Syntax um, Root = TypedDict('Root', {"class": int}), wo Schlüssel Zeichenketten sind und alles geht.

Was eine Probe Ihnen nicht sagen kann

Nichts ist | None, und nichts hat einen Vorgabewert: jedes Feld ist Pflicht, weil die Probe es enthielt. Ein null ergibt den Typ None, der nichts anderes annimmt — ist das Feld „eine Zeichenkette, manchmal null“, lautet die Änderung str | None, und = None, wenn es fehlen darf.

Zwei Schlüssel, die denselben snake_case ergeben — fooBar und foo_bar —, werden durch ein nummeriertes Suffix getrennt statt verschmolzen, und der Alias hält fest, welcher welcher war.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Welchen der drei Stile soll ich nehmen?
Pydantic, wenn die Daten von außen kommen und an der Grenze geprüft werden sollen. `dataclass`, wenn sie schon vertrauenswürdig sind und ein schlichter Behälter genügt. `TypedDict`, wenn Sie vorhandene Dictionaries annotieren, ohne Laufzeitcode zu ändern. Die abgeleitete Struktur ist dieselbe; nur ihr Preis unterscheidet sich.
Warum wird mein Schlüssel umbenannt, und wo ist er hin?
Python-Attribute stehen in snake_case: `firstName` wird `first_name`. Im Pydantic-Stil bewahrt `Field(alias="firstName")` den ursprünglichen Schlüssel, und das Parsen funktioniert weiter. `dataclass` hat keinen Alias zu bieten — nur der Name bleibt — und `TypedDict` behält den rohen Schlüssel und wechselt in seine funktionale Syntax, wenn ein Schlüssel kein brauchbarer Name ist.
Was wird aus einem Schlüssel namens `class` oder `def`?
Er bekommt einen Unterstrich: `class_`, `def_`, mit `Field(alias="class")` unter Pydantic. `class: int` auszugeben ergab eine Datei, die Python nicht einmal parst — ein echter Fehler, beim Schreiben dieser Seite gefunden und behoben. `TypedDict` umgeht die Frage mit `TypedDict('Root', {"class": int})`.

Ähnliche Konverter