JSON zu Python
Kein Inhalt
Kostenloses Online-Tool JSON zu Python, das JSON-Daten automatisch in Python @dataclass-Klassen mit Typannotationen umwandelt. Zeichenfolgen werden zu str, Ganzzahlen zu int, Gleitkommazahlen zu float, Boolesche Werte zu bool, Arrays zu List[T], verschachtelte Objekte erzeugen unabhängige Dataclasses, null wird zu Optional[Any]. Lokale Browser-Ausführung, Kopieren in einem Klick oder Download model.py. Der generierte Code ist kompatibel mit der Standardbibliothek dataclasses von Python 3.7+ und kann direkt mit FastAPI, Django REST Framework, marshmallow, cattrs und anderen gängigen Python-Frameworks verwendet werden, oder als stark typisierte Datenstruktur in Jupyter Notebook.
Ähnliche Tools
Über JSON zu Python: JSON-Daten in ausführbare Dataclass-Modelle umwandeln
JSON zu Python ist der Prozess der Umwandlung von Daten im JSON-Format (Objekte oder Arrays) in Python-Dataclass-Typdefinitionen. Python ist eine der beliebtesten Allzweckprogrammiersprachen heute, weit verbreitet für Web-Backends (FastAPI/Django/Flask), Data Science (pandas/scikit-learn), Web-Scraping, Betriebsskripte, maschinelles Lernen, automatisierte Tests und andere Szenarien. In der Entwicklung ist es häufig erforderlich, JSON-Beispiele aus API-Dokumentationen oder tatsächlichen Antworten in Python-Typen zu konvertieren; das manuelle Schreiben von Klassen ist nicht nur repetitiv, sondern auch anfällig für Feldtypfehler. Das Ziel dieses Tools ist es, diesen Prozess zu automatisieren.
Dataclass ist eine Standardbibliotheksfunktion, die in Python 3.7 eingeführt wurde (PEP 557) und über den @dataclass-Dekorator automatisch magische Methoden wie __init__, __repr__, __eq__ generiert, wodurch die Definition von Datenklassen von einem Dutzend Zeilen Boilerplate-Code auf wenige Zeilen Felddeklarationen reduziert wird. Dieses Tool basiert auf quicktype-core, das lokal im Browser ausgeführt wird, verwendet die Renderoptionen just-types und no-comments, um reinen Python-Dataclass-Code zu generieren. Die Ausgabe enthält notwendige Importe wie from dataclasses import dataclass und from typing import Any, List, Optional und kann direkt in Python 3.7+-Projekten verwendet werden.
Typerkennung ist das Herzstück von JSON zu Python. Das Tool ordnet JSON-Grundtypen Python-Standardtypen zu: Zeichenfolgen werden zu str, Ganzzahlen zu int, Gleitkommazahlen zu float, Boolesche Werte zu bool, Arrays zu List[T] (Elemente werden aus dem ersten Element abgeleitet), verschachtelte Objekte zu unabhängigen @dataclass, null-Werte zu Optional[Any]. Bei verschachtelten Objekten erstellt das Tool automatisch für jede Ebene eine neue Dataclass, benannt nach der Großschreibung des Feldnamens, z.B. erzeugt das Feld address eine Klasse Address, Objekte im Array items erzeugen eine Klasse Item.
Im Gegensatz zu einigen Online-Tools, bei denen JSON zur Verarbeitung an einen Server gesendet werden muss, erfolgen alle Berechnungen dieses Tools im Browser. quicktype-core wird über Web Worker geladen und ausgeführt, JSON-Parsing, Typerkennung, Python-Codegenerierung und Dateidownload erfolgen alle lokal, keine Daten werden an einen Server gesendet. Dies ist besonders wichtig für JSON, das API-Schlüssel, Datenschutzfelder oder nicht veröffentlichte Geschäftsstrukturen enthält, Daten werden beim Schließen der Seite aus dem Speicher gelöscht.
Der generierte Code kann direkt in Python-Projekten platziert und verwendet werden. Dataclass ist Teil der Standardbibliothek, keine zusätzliche Installation erforderlich; das typing-Modul ist ab Python 3.5 verfügbar. Bei Verwendung von Python 3.9+ können Sie List[str] manuell durch das integrierte list[str], Optional[str] durch str | None ersetzen, um eine modernere Typannotationssyntax zu genießen. Wenn das Projekt Pydantic zur Datenvalidierung verwendet (wie FastAPI), ersetzen Sie einfach @dataclass durch class Xxx(BaseModel):, um nahtlos zu einem Pydantic-Modell zu wechseln.
Beachten Sie, dass automatisch generierter Code ein Ausgangspunkt und kein Endpunkt ist. Das Tool leitet Typen aus JSON-Beispielen ab und kann keine genauen Geschäftstypen bestimmen (z.B. werden semantische Typen wie URL, E-Mail, ID alle einheitlich als str abgeleitet). Bei JSON-Feldern in snake_case werden Python-Dataclass-Felder unverändert generiert, Sie müssen möglicherweise Feldnamen manuell in snake_case ändern oder die Zuordnung über Pydantics alias_generator konfigurieren. Es wird empfohlen, das generierte Ergebnis als ersten Entwurf zu verwenden und dann Feldnamen, Typen, Standardwerte und Validierungslogik gemäß den Projektstandards zu verfeinern.
Ein weiterer erwähnenswerter Vergleichsaspekt ist dataclass vs. Pydantic BaseModel vs. attrs vs. TypedDict. Dataclass ist die Python-Standardbibliothek, keine Abhängigkeiten, reine Datenmodellierung, keine Laufzeitvalidierung, geeignet für interne Datenübertragungsobjekte (DTO) und ORM-Modelle. Pydantic BaseModel fügt auf der Grundlage von Dataclass typgesteuerte Validierung, Serialisierung und Einstellungsverwaltung hinzu und ist die Standard-Datenmodellebene von FastAPI. attrs ist der Vorgänger von Dataclass und bietet mehr Konfigurationsoptionen (slots, validators, converters). TypedDict ist eine leichtgewichtige Lösung des typing-Moduls, bietet nur Typhinweise ohne Laufzeitbeschränkungen, geeignet für mit dict kompatible Szenarien. Dieses Tool generiert standardmäßig Dataclass, die im Editor in einem Klick durch eine der oben genannten Formen ersetzt werden kann.
Im Vergleich zu Online-Tools wie Java zu JSON / TypeScript zu JSON hat JSON zu Python einen einzigartigen Wert im Data-Science-Ökosystem. Funktionen wie pandas read_json, DataFrame.from_records, json_normalize erfordern häufig listenähnliche Objektlisten; scikit-learns Pipeline.fit akzeptiert Datenstrukturen mit Feldeinschränkungen; In Jupyter Notebook kann das Verpacken von JSON-Antworten mit Dataclass bei explorativen Analysen die Lesbarkeit des Codes erheblich verbessern. Der von diesem Tool generierte Code kann nahtlos in diese Ökosysteme integriert werden und macht das JSON-Beispiel zur einzigen Quelle der Wahrheit.
Im Python-Ökosystem gibt es weitere optionale Tools für die bidirektionale Konvertierung JSON ↔ Dataclass: marshmallow (Schwerpunkt auf Serialisierungs-/Deserialisierungsvalidierung), cattrs (strukturierte Konvertierungsbibliothek), pydantic (Laufzeitvalidierung + IDE-Unterstützung), apischema (generiert JSON-Schema ohne Dataclass-Dekorator). Die von diesem Tool generierte reine Dataclass ist eine natürliche Eingabe für diese Bibliotheken: Nach dem Kopieren der generierten Klasse fügen marshmallow-Benutzer einfach Schema(Model) hinzu, cattrs-Benutzer verwenden cattrs.structure(data, Model), um die Konvertierung abzuschließen. Es wird empfohlen, dieses Tool als Ausgangspunkt für die Typgenerierung zu verwenden und dann geeignete Ökosystembibliotheken entsprechend der Projektarchitektur hinzuzufügen.
In CLI- und Automatisierungsszenarien hat JSON zu Python ebenfalls einen einzigartigen Wert. Nach dem Parsen von Befehlszeilenargumenten durch argparse ist es häufig erforderlich, diese sekundär in dict zu verpacken und dann an Geschäftsfunktionen zu übergeben; das Ersetzen von dict durch die generierte Dataclass kann Skripte robuster machen. Ebenso können Konfigurationsdateien (config.json/settings.json), verpackt durch Dataclass, es Betriebskollegen ermöglichen, Feldbedeutungen und -typen direkt in der IDE zu sehen, und mit mypy Konfigurationsfehler in der CI-Phase frühzeitig zu erkennen.
Ein letztes oft übersehenes Detail ist das Gleichgewicht zwischen Leistung und Wartbarkeit. Die von diesem Tool generierte Dataclass ist der beste Träger für unveränderliche Snapshots: Mit (frozen=True) können Instanzen nicht geändert werden, Multi-Thread-Freigabe ist sicher; mit (slots=True) (Python 3.10+) wird die Speichernutzung um ca. 40% reduziert. Für generierte List[str]-Felder muss, um die Falle des gemeinsamen Nutzens derselben leeren Liste zu vermeiden, field(default_factory=list) anstelle von = [] verwendet werden, der von diesem Tool generierte Code befolgt diese Best Practice bereits.
Anwendungsfälle
- REST API-Integration: Konvertieren Sie die vom Backend zurückgegebene JSON-Antwort in Python @dataclass, verwenden Sie sie mit requests + json für stark typisierte HTTP-Anfrageauswertung. Mit mypy oder pyright erhalten Sie in der IDE Echtzeit-Attributvervollständigung und Typprüfung, vermeiden häufige Tippfehler.
- FastAPI Anfrage-/Antwortmodelle: Konvertieren Sie Beispiel-JSON aus der API-Schnittstellendokumentation in Pydantic BaseModel-Vorlagen, vereinheitlichen Sie Frontend-Backend-Modelldefinitionen. Es wird empfohlen, den response_model-Parameter in FastAPI-Projekten zu aktivieren, damit die OpenAPI-Dokumentation automatisch Feldbeispiele und Validierungsregeln generiert.
- Django Ninja / DRF-Serialisierer: Konvertieren Sie die JSON-Antwort in Dataclass und fügen Sie dann manuell DRFs ModelSerializer oder Ninjas Schema-abgeleitete Klassen hinzu. DRFs ModelSerializer kann automatisch Validierungsregeln basierend auf Dataclass generieren, Ninjas Schema kann die Ausgabe dieses Tools ebenfalls direkt wiederverwenden.
- Scraper-Datenmodellierung: Konvertieren Sie von Webseiten extrahierte JSON-Daten in Dataclass, vermeiden Feldfehler und Tippfehler durch dynamischen Zugriff mit dict. Bei asynchronen Scraper-Bibliotheken wie requests-html, playwright reduziert Dataclass auch den Boilerplate-Code für die JSON-Deserialisierung.
- ML-Feature-Definition: Konvertieren Sie das JSON-Schema von scikit-learn / pandas-Trainingsdaten in Dataclass, standardisieren Sie Feature-Feldnamen und -typen. sklearn Pipeline.fit(X, y) akzeptiert Datenstrukturen mit Typannotationen, dataclass + asdict ist eine effiziente Brücke zur Konvertierung mit pandas DataFrame.
- Konfigurationsdatei-Deserialisierung: Konvertieren Sie YAML/JSON-Konfigurationsdateibeispiele in Dataclass, verwenden Sie sie mit Hydra / OmegaConf für stark typisiertes Konfigurationslesen. Mit dem @dataclass-Dekorator von Hydra erhält die Konfiguration automatische Vervollständigung in der IDE, vermeidet häufige Tippfehler und Typinkonsistenzen in YAML-Konfigurationen.
- Jupyter Notebook temporäre Struktur: Konvertieren Sie JSON-Beispiele aus der explorativen Datenanalyse in Dataclass, erleichtern Attributzugriff und IDE-Vervollständigung in Notebook. Das Verpacken von JSON-Antworten mit Dataclass in Notebook verbessert die Lesbarkeit des Codes für explorative Analysen erheblich und erleichtert die spätere Refaktorisierung in Produktionsmodule.
- Microservice-Schnittstellendefinition: Konvertieren Sie Beispiel-JSON für Request-Bodys von gRPC/HTTP-Diensten in Python-Typen, vereinheitlichen Sie serverseitige Modelldefinitionen. Nach der Konvertierung von gRPC-Protobuf in JSON kann die Konvertierung in Dataclass als stark typisiertes Modell für Backend-Dienste dienen, ausgerichtet an Frontend-TypeScript-Typen.
- CLI-Tool-Entwicklung: Konvertieren Sie JSON-Beispiele für Befehlszeilenkonfigurationen in Dataclass, verwenden Sie sie mit argparse für Konfigurationsdeserialisierung und -validierung. Die Konvertierung eines argparse-Namespace in Dataclass erfordert nur eine Zeile dataclass(**vars(args)), sicherer als manuell geschriebene Parsing-Logik.
- Testdatenkonstruktion: Konvertieren Sie echte JSON-Fixtures, die vom Backend zurückgegeben werden, in Python-Typen, verwenden Sie dataclasses.replace in pytest für testdatengesteuerte Tests. Der parametrize-Dekorator von pytest in Kombination mit Dataclass kann typisierte Test-Fixtures konstruieren, mit klareren Fehlermeldungen.
- Strukturierte Protokollanalyse: Konvertieren Sie von ELK / Loki erfasste JSON-Protokolle in Dataclass, erleichtern Filterung und Alarmregeln. Nach der Verpackung durch Dataclass können JSON-Protokolle von ELK präzise Feldfilterung und Aggregationsabfragen durchführen, sicherer als der Zugriff über dict.
- Konfigurationszentrum-Migration: Konvertieren Sie JSON-Konfigurationen von Apollo / Nacos / Consul in Python-Typen für das serverseitige Hot-Reloading von Konfigurationen. JSON-Konfigurationen von Apollo / Nacos können bidirektional mit Dataclass validiert werden, fehlende Felder oder Typinkonsistenzen werden bei Konfigurationsänderungen sofort erkannt.
- Sprachübergreifende Zusammenarbeit: Bei der Integration zwischen Python-Backend und TypeScript-Frontend konvertieren Sie dasselbe JSON jeweils in Python-Dataclass und TS-Interface, um die Konsistenz auf beiden Seiten zu gewährleisten. In sprachübergreifenden Zusammenarbeitsszenarien teilen Python-Backend und TS-Frontend dasselbe JSON-Beispiel und generieren jeweils Dataclass und Interface, um die Konsistenz der Feldnamen zu gewährleisten.
- Datenbankmigration: Konvertieren Sie aus MongoDB / PostgreSQL JSONB-Feldern exportierte JSON-Dokumente in Python-Modelle als Referenz für ORM-Entitätsdefinitionen. Nach dem Export konvertierte MongoDB JSONB-Dokumente in Dataclass dienen als Feldreferenz für ORM-Entitäten, einfacher zu warten als das direkte Lesen von MongoDB-Dokumenten.
- Blockchain/Web3: Konvertieren Sie On-Chain-JSON-RPC-Antworten in Python-Dataclass für die Typkapselung von SDKs wie web3.py. Ethereum-SDKs wie web3.py, eth-brownie unterstützen alle Rückgabewerte im Dataclass-Stil und erleichtern die Sekundärkapselung.
- Data Science ETL: Konvertieren Sie vorgelagerte JSON-Datenquellen in Dataclass und verwenden Sie dann pandas DataFrame.from_records zur Konvertierung in Tabellen für nachgelagerte Analysen. pandas DataFrame.from_records([asdict(d) for d in dataclass_list]) erledigt die Konvertierung verschachtelter Strukturen in Tabellen in einer Zeile.
- OpenAPI-Schema-Validierung: Konvertieren Sie Beispiel-JSON aus OpenAPI-Dokumenten in Python-Modelle und schreiben Sie dann Pydantic-Validierungslogik. Das example-Feld von OpenAPI kann direkt als Eingabe für dieses Tool kopiert werden, das generierte Pydantic-Modell validiert automatisch die Konsistenz der API-Dokumentation.
- Lehrbeispiele: In Python-Kursen konvertieren Sie Beispiel-JSON in Dataclass, um das typing-Modul, Typannotationen, die automatische Generierung von __init__ und andere Konzepte zu erläutern. Beim Erklären des typing-Moduls, der automatischen Generierung von __init__, slots und anderer Konzepte in Python-Kursen ist Dataclass das anschaulichste Demonstrationsmedium.
- Feldnamenskonvertierung: Nach der Konvertierung von snake_case-JSON-API-Antworten in Dataclass ändern Sie die Feldnamen manuell oder konfigurieren Sie die Feldzuordnung über Pydantics alias_generator. Pydantics alias_generator kann in BaseModel für die automatische Zuordnung camelCase ↔ snake_case konfiguriert werden und vermeidet manuell geschriebene Aliase.
Anleitung
- Fügen Sie JSON-Inhalt in den linken Editor ein oder klicken Sie auf die Schaltfläche zum Hochladen, um eine .json/.txt-Datei auszuwählen
- Warten Sie 400 ms auf die automatische Konvertierung, der generierte Python-Dataclass-Code wird rechts angezeigt
- Wenn das JSON-Format falsch ist, klicken Sie auf die Schaltfläche «JSON reparieren», um häufige Syntaxprobleme automatisch zu beheben
- Klicken Sie auf «Kopieren», um es in das models/-Verzeichnis des Projekts einzufügen, oder klicken Sie auf «Herunterladen», um es als model.py-Datei zu speichern
Funktionen
- Lokale Browser-Konvertierung: JSON-Parsing und Python-Codegenerierung erfolgen vollständig im Browser, keine Daten werden an Server gesendet, auch sensible API-Antworten können sicher verwendet werden
- Dataclass-Annotationsausgabe: Generiert mit @dataclass dekorierte Standard-Python-Klassen, die mit from __future__ import annotations direkt in Python 3.7+-Projekten verwendet werden können
- Automatische Typerkennung: str / int / float / bool / List[T] / Dict[str, Any] / Optional[Any] werden automatisch entsprechend den JSON-Werten zugeordnet, keine manuelle Angabe der Feldtypen erforderlich
- Automatische Aufteilung verschachtelter Objekte: Verschachtelte JSON-Objekte erzeugen unabhängige @dataclass-Klassen, benannt nach Großschreibung des Feldnamens (z.B. address -> Address), vermeidet doppelte Typdefinitionen
- Automatische Auflösung von List-Generics: JSON-Arrays werden automatisch zu List[T] konvertiert, der Elementtyp wird aus dem ersten nicht-null-Element des Arrays abgeleitet, z.B. ["a","b"] -> List[str], [{...},{...}] -> List[Item]
- Optionale Optional-Felder: Null-Felder erzeugen Optional[Any] als Fallback, um sicherzustellen, dass Typannotationen fehlende Felder korrekt ausdrücken
- Automatische Konvertierung mit 400ms Entprellung: Konvertierung wird automatisch nach dem Einfügen ausgelöst, Python-Code-Vorschau in Echtzeit rechts, reduziert Wartezeit und überflüssige Klicks
- JSON-Fehlerbehebung in einem Klick: Behebt automatisch häufige Formatfehler wie abschließende Kommas, einfache Anführungszeichen, fehlende Anführungszeichen, setzt die Codegenerierung nach erfolgreicher Reparatur fort
- Kopieren und Herunterladen: Kopieren Sie den gesamten Python-Code in einem Klick oder laden Sie ihn als model.py-Datei herunter, die direkt im Projektstamm oder im models-Untermodul platziert werden kann
- localStorage-Eingabeverlauf: Speichert automatisch die letzten Eingaben lokal, ermöglicht schnelle Wiederherstellung nach Aktualisierung oder versehentlichem Schließen der Seite
- Responsive Spaltenbearbeitung: JSON links eingeben, Python-Code rechts anzeigen, unterstützt Ziehen zur Größenanpassung der Panels, angepasst an große Bildschirme und Mobilgeräte
- Unterstützt Pydantic/attrs/TypedDict-Nachbearbeitung: Die generierte Dataclass kann in einem Klick mit BaseModel- oder attrs-Dekoratoren für FastAPI, Django Ninja, pydantic-settings und andere Frameworks angepasst werden
Codebeispiele
Python: API-Antwort mit requests zur generierten Dataclass parsen
python# requirements.txt
# requests>=2.31
from dataclasses import dataclass
from typing import Any, List, Optional
import json
import requests
@dataclass
class Address:
city: str
zip: str
@dataclass
class User:
id: int
name: str
active: bool
address: Address
tags: List[str]
label: Optional[Any] = None
def main() -> None:
resp = requests.get("https://api.example.com/users/1", timeout=10)
resp.raise_for_status()
# JSON-String direkt in Dataclass-Instanz deserialisieren
user: User = User(**resp.json())
# Stark typisierter Zugriff: IDE-Vervollständigung, mypy/pyright statische Prüfung
print(f"{user.name} lives in {user.address.city}")
print(f"tags: {user.tags}")
if __name__ == "__main__":
main()Python: FastAPI verwendet generiertes Modell zur Request-Body-Validierung (Pydantic angepasste Version)
python# pip install fastapi 'pydantic>=2'
from typing import List, Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Address(BaseModel):
city: str
zip: str
class User(BaseModel):
id: int
name: str
email: str
active: bool = True
address: Address
tags: List[str] = []
label: Optional[str] = None
app = FastAPI()
@app.post("/users")
async def create_user(user: User) -> dict:
# FastAPI validiert den Request-Body automatisch mit User, Feldtyp/Pflichtfehler geben 422 zurück
return {"id": user.id, "name": user.name}
@app.get("/users/{user_id}", response_model=User)
async def get_user(user_id: int) -> User:
# response_model serialisiert die Antwort automatisch, OpenAPI-Dokumentation automatisch generiert
return User(
id=user_id,
name="Alice",
email="alice@example.com",
active=True,
address=Address(city="Beijing", zip="100000"),
tags=["fastapi", "pydantic"],
)Python: Scraper-Datenmodellierung (dataclass + JSON-Deserialisierung)
pythonfrom dataclasses import dataclass, asdict
from typing import List, Optional
import json
@dataclass
class Author:
id: int
name: str
@dataclass
class Article:
id: int
title: str
url: str
author: Author
score: int
tags: List[str]
summary: Optional[str] = None
def parse_articles(raw_json: str) -> List[Article]:
"""Vom Scraper erfasste JSON-Zeichenfolge in Article-Liste deserialisieren."""
payloads = json.loads(raw_json)
return [Article(**payload) for payload in payloads]
if __name__ == "__main__":
raw = '''[
{
"id": 1,
"title": "Hello dataclass",
"url": "https://example.com/p/1",
"author": {"id": 10, "name": "Alice"},
"score": 95,
"tags": ["python", "typing"],
"summary": "quick intro"
}
]'''
articles = parse_articles(raw)
for art in articles:
# Automatische IDE-Vervollständigung für author.name, tags, summary
print(f"[{art.score}] {art.title} - {art.author.name}")
print(f" tags: {art.tags}")
# Bei Bedarf dict-Form (z.B. Schreiben in MongoDB) mit asdict
doc = asdict(art)
print(f" mongo doc: {doc}")Python: ML-Feature-Definition (pandas + sklearn-Integration)
python# pip install pandas scikit-learn
from dataclasses import dataclass, field, asdict
from typing import List, Optional
import json
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
@dataclass
class FeatureSchema:
"""Beispiel-Feature-Schema, generiert vom JSON-zu-Python-Tool und dann angepasst."""
user_id: int
age: int
city: str
plan: str
monthly_spend: float
active: bool
tags: List[str] = field(default_factory=list)
last_login: Optional[str] = None
def features_to_frame(samples: List[dict]) -> pd.DataFrame:
"""JSON-Liste in DataFrame konvertieren, automatisch Dataclass-Feldnamen als Spaltennamen verwenden."""
rows = [asdict(FeatureSchema(**row)) for row in samples]
df = pd.DataFrame(rows)
# Kategorische Felder One-Hot-Kodierung
df = pd.get_dummies(df, columns=["city", "plan"], drop_first=True)
return df
def main() -> None:
raw = json.loads('''[
{"user_id": 1, "age": 25, "city": "Beijing", "plan": "pro", "monthly_spend": 99.0, "active": true, "tags": ["new"]},
{"user_id": 2, "age": 40, "city": "Shanghai", "plan": "free", "monthly_spend": 0.0, "active": false, "tags": []}
]''')
X = features_to_frame(raw)
y = [1, 0] # Angenommene Labels: zahlende Benutzer / kostenlose Benutzer
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
print("feature_columns:", list(X.columns))
print("importances:", dict(zip(X.columns, model.feature_importances_)))Best Practices
JSON-Beispiel sollte nach Möglichkeit vollständige Beispielwerte für alle Felder enthalten
Das Tool leitet Typen aus JSON-Beispielen ab, wenn ein Feld im Beispiel immer null ist, wird es als Optional[Any] als Fallback gesetzt. Es wird empfohlen, vor der Generierung allen Schlüsselfeldern einen Beispielwert zu geben (z.B. "description": "sample" wird als str abgeleitet, "count": 0 als int), und die Beispielwerte nach der Generierung zu löschen, um genaue Typen zu erhalten.
Komplexe JSONs vorzugsweise in mehrere Dataclasses aufteilen
Dieses Tool löst verschachtelte Objekte standardmäßig rekursiv in unabhängige Klassen auf, aber wenn die Anzahl der Felder in einer einzigen Datei 50 übersteigt, wird empfohlen, sie manuell in Untermodelle wie models/user.py, models/order.py aufzuteilen. Dies hat drei Vorteile: ① schnellere Kompilierung; ② klarere Aufgabenteilung zwischen Teammitgliedern; ③ Zirkelverweise sind einfacher zu handhaben.
Wechseln Sie zu Pydantic BaseModel, wenn Laufzeitvalidierung erforderlich ist
Wenn das Projekt FastAPI verwendet oder eine strenge Request-Body-Validierung erfordert, wird empfohlen, nach der Generierung der Dataclass sofort zu BaseModel zu wechseln: Ersetzen Sie @dataclass durch class Xxx(BaseModel):, ersetzen Sie from dataclasses import dataclass durch from pydantic import BaseModel, die anderen Feldtypen bleiben unverändert. Nach der Neuschreibung des Kerns in Rust ist Pydantic v2 sogar schneller als die Dataclass-Validierung.
Kombinieren Sie mypy für Typprüfungen in der CI-Phase
Fügen Sie den Befehl mypy src/ --strict zur CI-Pipeline hinzu, er kann Feldtippfehler, Typinkonsistenzen, missbräuchliche Verwendung von Optional und andere Probleme erkennen. Die von diesem Tool generierte Dataclass entspricht vollständig der PEP 484-Norm und besteht mypy ohne Warnungen. In Kombination mit einem pre-commit-Hook können Entwickler vor dem Commit automatisch prüfen.
Vermeiden Sie veränderliche Standardwerte in Dataclass-Feldern
tags: List[str] = [] ist ein häufiger Fehler, der dazu führt, dass alle Instanzen dieselbe leere Liste teilen. Der von diesem Tool generierte Code verwendet bereits field(default_factory=list), um dies zu handhaben, aber beim manuellen Hinzufügen neuer Felder nach der Generierung ist es wichtig, diese Regel zu befolgen. Das Python-Typsystem deckt diesen Bug erst zur Laufzeit auf, statische Prüfer erkennen ihn möglicherweise nicht.
Heruntergeladenes model.py sollte in ein unabhängiges models-Paket gelegt werden
Empfohlene Verzeichnisstruktur: src/models/__init__.py + src/models/user.py + src/models/order.py. Vorteile: ① Geschäftscode vereinfacht Imports mit from models import User; ② Team kann verschiedene Dataclasses pro Modul übernehmen; ③ pytest-Fixtures können einheitlich in conftest.py importiert werden.
Vertrauliche JSONs müssen lokal verarbeitet werden
Wenn das JSON vertrauliche Informationen wie API-Schlüssel, Tokens, nicht öffentliche Geschäftsstrukturen, nicht veröffentlichte Produktspezifikationen enthält, verwenden Sie unbedingt dieses Tool (lokale Browser-Ausführung) anstelle von Online-Tools, die ein Hochladen erfordern. Dieses Tool sendet keine Daten an einen Server, der gesamte JSON-Inhalt im Speicher wird beim Schließen der Seite gelöscht.
Python 3.10+ aktivieren Sie slots, um Speicher zu sparen
Wenn Sie viele Dataclass-Instanzen erstellen müssen (z.B. Modellierung von Millionen Daten beim Scraping), empfehle ich Python 3.10+ die Aktivierung von @dataclass(slots=True). Nach der Aktivierung verwenden Instanzen kein __dict__ mehr, die Speichernutzung wird um 30-40% reduziert, die Attributzugriffsgeschwindigkeit um ca. 20% verbessert. Der von diesem Tool generierte Code aktiviert diese Option standardmäßig nicht, Sie können slots=True nach der Generierung manuell hinzufügen.
Häufig gestellte Fragen
Wie konvertiere ich JSON in eine Python dataclass?
Fügen Sie JSON-Inhalt in den linken Editor ein oder klicken Sie auf die Schaltfläche zum Hochladen, um eine .json/.txt-Datei auszuwählen. Das Tool ruft automatisch quicktype-core innerhalb von 400ms auf, um Python-Code zu generieren, die Klassendefinition mit @dataclass-Dekorator wird rechts angezeigt. Wenn das JSON-Format falsch ist, klicken Sie auf die Schaltfläche «JSON reparieren», um es automatisch zu korrigieren und dann zu konvertieren. Wenn die Konvertierung nicht innerhalb von 400ms automatisch ausgelöst wird, klicken Sie manuell auf die Convert-Schaltfläche in der Symbolleiste.
Enthält der generierte Python-Code dataclass-Annotationen?
Ja. Das Tool verwendet den just-types-Rendermodus von quicktype-core und generiert für Python den @dataclass-Dekorator, from dataclasses import dataclass und notwendige Importe wie from typing import Any, List, Optional, die direkt mit der Standardbibliothek dataclasses von Python 3.7+ verwendet werden können. Wenn Sie keine Dataclass benötigen, können Sie den Dekorator und die Importanweisungen manuell entfernen und in eine normale Klasse umschreiben. Für präzisere Typen (wie Decimal, UUID, datetime) empfehle ich die Verwendung mit Pydantic BaseModel.
Welche JSON-Datenstrukturen werden unterstützt?
Unterstützt alle gültigen JSON-Strukturen: Grundtypen (null, boolean, number, string), Arrays (eindimensional oder mehrdimensional), verschachtelte Objekte (beliebige Tiefe). JSON-Objekte erzeugen eine Root-Dataclass, JSON-Arrays erzeugen einen Root-Container vom Typ List[RootClass]. Unterstützt keine Nicht-JSON-Werte wie JavaScript-Objektliterale, Funktionen, Symbol, undefined. quicktype-core unterstützt auch JSON Schema, JSON-Beispiele und TypeScript-Eingaben als Typquellen.
Wie werden JSON-Feldtypen Python-Typen zugeordnet?
Zeichenfolgen werden zu str, Ganzzahlen zu int, Gleitkommazahlen zu float, Boolesche Werte zu bool, Arrays zu List[T] (Elementtyp wird aus dem ersten Element abgeleitet), verschachtelte Objekte zu unabhängigen @dataclass, null zu Optional[Any]. Die detaillierten Zuordnungsregeln finden Sie in der «Schnellreferenztabelle JSON-Typen zu Python-Typen» unten auf der Seite. Python 3.9+ kann die integrierte Syntax list[str], dict[str, Any] verwenden, ohne aus dem typing-Modul zu importieren.
Welcher Typ wird für null-Werte generiert?
Null-Werte in JSON generieren Optional[Any], was bedeutet, dass das Feld fehlen oder einen unbestimmten Typ haben kann. Wenn Sie den tatsächlichen Typ des Feldes kennen, geben Sie einen Beispielwert im Quell-JSON an (z.B. "field": "" wird als str abgeleitet) und ändern Sie ihn nach der Generierung manuell in Optional[str] oder einen genaueren Typ entsprechend den Geschäftsanforderungen. Wenn im JSON viele Null-Felder vorhanden sind, ersetzen Sie diese im Quelldatensatz durch Beispielwerte (wie leere Zeichenfolge, 0, false), um ein genaueres Ableitungsergebnis zu erhalten.
Werden Arrays zu List konvertiert?
Ja. JSON-Arrays werden einheitlich in das generische Python List[T] konvertiert, der Elementtyp wird automatisch aus dem ersten Element des Arrays abgeleitet. Zum Beispiel ["a","b"] generiert List[str], [1,2,3] List[int], [{...},{...}] List[Item]. Ein leeres Array [] generiert standardmäßig List[Any]. Mehrdimensionale Arrays werden rekursiv zu List[List[T]] aufgelöst, z.B. [[1,2],[3,4]] wird zu List[List[int]].
Wie werden verschachtelte Objekte behandelt?
Jedes verschachtelte Objekt generiert eine unabhängige @dataclass-Klasse, benannt nach der Großschreibung des Feldnamens. Wenn das Root-Objekt beispielsweise ein address-Feld enthält, werden gleichzeitig zwei Dataclasses Root und Address generiert, auf die in Root über address: Address verwiesen wird. Objekte mit gleicher Struktur werden denselben Typ wiederverwenden, um doppelte Definitionen zu vermeiden. Objekte gleicher Struktur werden zu einer einzigen @dataclass-Klasse zusammengefasst, um Redundanz zu vermeiden; bei Bedarf kann nach der Generierung manuell in mehrere Klassen aufgeteilt werden.
Kann der Name der generierten Klasse angepasst werden?
quicktype-core verwendet standardmäßig den Namen der JSON-Quelle (z.B. User) als Root-Klassennamen. Sie können den Klassennamen und seine Referenzen nach der Generierung manuell ändern. Der Name der heruntergeladenen model.py-Datei kann beim Speichern ebenfalls nach Bedarf umbenannt werden. Der Root-Klassenname ist standardmäßig JsonRootClass, Sie können die Rename-Funktion der IDE nach der Generierung verwenden, um ihn in einen semantischen Geschäftsnamen (wie User, Order) umzubenennen.
Kann der generierte Code direkt in einem Projekt verwendet werden?
Er kann direkt verwendet werden, stellen Sie jedoch sicher, dass eine Python 3.7+-Umgebung vorhanden ist (dataclasses ist eine Standardbibliothek ab 3.7). Der Code hängt vom typing-Modul ab, das ab Python 3.5 verfügbar ist. Um die präziseren integrierten Generics list[str], dict[str, Any] in Python 3.9+ zu verwenden, können Sie importierte Typen wie List[str] manuell ersetzen. Bei modernen Paketverwaltungstools wie uv, poetry, pdm kann die Art der Abhängigkeitsdeklaration leicht variieren, aber dataclass selbst erfordert keine zusätzlichen Abhängigkeiten.
Kann anstelle von dataclass in Pydantic BaseModel konvertiert werden?
Das Tool generiert standardmäßig @dataclass. Wenn Sie Pydantic BaseModel für die FastAPI-Request-Body-Validierung benötigen, können Sie: ① from dataclasses import dataclass durch from pydantic import BaseModel ersetzen; ② @dataclass durch class Xxx(BaseModel): ersetzen; ③ Optional[Any] durch Optional[spezifischer Typ] ersetzen oder den Standard beibehalten. Pydantic v2 unterstützt auch die direkte Vererbung von dataclass. Pydantic v2 unterstützt gleichzeitig den dataclass-Stil: Sie können der Dataclass direkt den @dataclass-Dekorator hinzufügen und sie dann an FastAPI übergeben, ohne BaseModel zu erben.
Was sind die vollständigen Schritte zum Generieren eines FastAPI-Request-Body-Modells?
FastAPI empfiehlt die Verwendung von Pydantic BaseModel. Nach dem Generieren der Dataclass sind drei Schritte zur Anpassung erforderlich: ① @dataclass in class Xxx(BaseModel): ändern; ② den dataclasses-Import löschen und from pydantic import BaseModel hinzufügen; ③ in der FastAPI-Route den Request-Body mit user: Xxx = Body(...) empfangen, um eine automatische Validierung zu erhalten. Fortgeschrittene Verwendung: In FastAPI kann Annotated[User, Body(...)] eine weitere Steuerung des Medientyps und des Validierungsverhaltens des Request-Bodys ermöglichen.
Werden Daten an den Server gesendet? Ist die Privatsphäre sicher?
Vollständig lokale Browser-Ausführung. JSON-Parsing, Python-Codegenerierung und Dateidownload erfolgen alle im Browser über JavaScript, die eingegebenen JSON-Daten und der generierte Python-Code werden an keinen Server gesendet und auch nicht in der Cloud aufgezeichnet oder zwischengespeichert. Vertrauliche JSON mit API-Schlüsseln, Tokens, nicht öffentlichen Geschäftsfeldern können sicher verwendet werden, sie werden beim Schließen der Seite gelöscht. Nach dem Schließen oder Aktualisieren der Seite werden alle Eingaben, Ausgaben und localStorage-Verläufe aus dem Speicher gelöscht, ohne verbleibende Spuren.
Ist eine Registrierung oder Anmeldung erforderlich?
Nein. Das Tool ist vollständig kostenlos, keine Registrierung, Anmeldung oder Autorisierung erforderlich. Es kann sofort nach dem Öffnen der Seite verwendet werden, alle Funktionen sind lokal im Browser verfügbar. Das Tool ist vollständig kostenlos, werbefrei, ohne Autorisierung und fügt keine Wasserzeichen oder Tracking-Code in die generierten Ergebnisse ein.
Was tun bei JSON-Formatfehlern?
Das Tool erkennt automatisch die Gültigkeit von JSON, zeigt bei Fehlern eine rote Fehlermeldung rechts an und stellt eine Schaltfläche «JSON reparieren» bereit. Nach dem Klick werden häufige Fehler automatisch behoben: überflüssiges Komma am Ende, Ersetzen einfacher Anführungszeichen durch doppelte, Hinzufügen von Anführungszeichen zu Schlüsseln ohne Anführungszeichen, Entfernen von Kommentaren usw. Die Python-Codegenerierung wird nach erfolgreicher Reparatur fortgesetzt. Das reparierte JSON ändert nicht die ursprüngliche Semantik, nur die Formatierung wird korrigiert; wenn das Ergebnis nicht zufriedenstellend ist, können Sie es manuell rückgängig machen und neu einfügen.
Wird die Konvertierung großer JSONs langsam?
Das Tool hat keine explizite Zeilenbegrenzung, aber das Parsing und Rendern sehr großer JSONs durch den Browser kann langsamer werden. Empfehlungen: ① Teilen Sie das JSON und konvertieren Sie es stapelweise; ② konzentrieren Sie sich jeweils nur auf eine Verschachtelungsebene; ③ wenn Sie mehr als 100 Klassen stapelweise generieren müssen, empfehle ich die Verwendung des Kommandozeilentools quicktype (pip install quicktype) oder datamodel-code-generator. datamodel-code-generator (pip install datamodel-code-generator) ist ein weiteres leistungsstarkes Kommandozeilentool, das die direkte Ausgabe von Pydantic-Modellen unterstützt.
Fehlerbehebung
Meldung «Bitte JSON-Daten eingeben» oder rechte Seite leer
Die linke Eingabebox ist leer oder enthält nur Leerzeichen. Stellen Sie sicher, dass gültiger JSON-Inhalt eingefügt wurde, oder klicken Sie auf die Schaltfläche zum Hochladen, um eine .json/.txt-Datei auszuwählen, Sie können auch auf die Beispielschaltfläche klicken, um ein integriertes Beispiel zu laden.
Meldung JSON-Parsing fehlgeschlagen
Häufige Ursachen: überflüssiges Komma am Ende, Verwendung einfacher statt doppelter Anführungszeichen, Schlüssel ohne doppelte Anführungszeichen, enthält JavaScript-Kommentare. Klicken Sie auf die Schaltfläche «JSON reparieren», um einige Fehler automatisch zu beheben; falls es weiterhin fehlschlägt, überprüfen Sie zuerst mit einem JSON-Formatierungstool.
Generierte Feldtypen sind nicht genau genug
Das Tool leitet Typen aus JSON-Beispielen ab, z.B. sind alle Ganzzahlen int, alle Zeichenfolgen str. Wenn Sie genauere Typen wie Decimal, datetime, UUID, EmailStr benötigen, ändern Sie die Feldtypen nach der Generierung manuell und verwenden Sie Field-Einschränkungen im Pydantic-Modus.
Null-Feld hat Optional[Any] statt Optional[str] generiert
Da JSON-null keinen konkreten Typ ableiten kann, verwendet das Tool sicherheitshalber Optional[Any] als Fallback. Wenn Sie den tatsächlichen Typ des Feldes kennen, ersetzen Sie ihn im Quell-JSON durch einen Beispielwert (z.B. "field": "") zur Neugenerierung und ändern Sie ihn dann manuell in Optional[str].
Laufzeitmeldung Fehlendes Modul typing
typing ist eine Standardbibliothek ab Python 3.5+, dataclass eine Standardbibliothek ab Python 3.7+. Überprüfen Sie die Python-Version: python --version. Wenn die Version zu alt ist, aktualisieren Sie auf Python 3.9+, um bessere Generic-Syntax zu erhalten (list[str], dict[str, Any]).
Ich möchte Pydantic BaseModel generieren, aber nicht manuell umschreiben
Das Tool generiert standardmäßig @dataclass. Wenn das Projekt Pydantic verwenden muss, gibt es zwei Wege: ① Kopieren Sie das generierte Ergebnis und verwenden Sie Suchen & Ersetzen in der IDE, um @dataclass durch class Xxx(BaseModel): zu ersetzen, from dataclasses import dataclass durch from pydantic import BaseModel zu ersetzen; ② Verwenden Sie stattdessen das Kommandozeilentool datamodel-code-generator (pip install datamodel-code-generator), das die direkte Ausgabe von Pydantic-Modellen unterstützt.
Importfehler der heruntergeladenen .py-Datei im Projekt
Mögliche Ursachen: ① Python-Version niedriger als 3.7 (keine dataclasses); ② Projekt hat mypy-Strict-Modus, aber Felder haben keine Typdeklaration; ③ Klassenname steht in Konflikt mit anderen Modulen im Projekt. Lösung: Aktualisieren Sie Python auf 3.9+, stellen Sie sicher, dass alle Felder Typannotationen haben, benennen Sie in Konflikt stehende Klassen mit import as um.
snake_case-JSON-Felder stimmen nicht mit Python-Benennungsstil überein
Das Tool generiert Python-Felder unter Beibehaltung der ursprünglichen JSON-Feldnamen. Python empfiehlt snake_case-Benennung, die natürlich mit dem Stil von JSON-Feldern übereinstimmt; wenn Sie camelCase benötigen (z.B. bei Anbindung an JavaScript-Frontend), ändern Sie die Feldnamen manuell oder konfigurieren Sie die Alias-Zuordnung über Pydantics alias_generator.
Seite friert bei der Konvertierung sehr großer JSONs ein
Es wird empfohlen, das JSON in mehrere unabhängige Module aufzuteilen und separat zu konvertieren, oder nur den zu modellierenden Teil zu extrahieren. Das Rendern vieler Dataclasses durch den Browser verbraucht viel Speicher, für JSON über 10 MB wird die Verwendung des Kommandozeilentools quicktype (npx quicktype) oder datamodel-code-generator empfohlen.
FastAPI-Validierung der Request-Body-Felder schlägt fehl (422-Fehler)
FastAPI verwendet standardmäßig Pydantic für strenge Validierung, fehlende Felder oder Typinkonsistenzen geben 422 zurück. Lösung: ① Ändern Sie den Feldtyp in Optional[Typ] = None, um das Feld optional zu machen; ② Verwenden Sie Field(default=..., description=...), um Standardwerte und Dokumentation festzulegen; ③ Überprüfen Sie, dass der Content-Type des Request-Bodys application/json sein muss.
Glossar
- dataclass
- Python 3.7+ Standardbibliotheksdekorator (@dataclass), zur automatischen Generierung magischer Methoden wie __init__, __repr__, __eq__. Dieses Tool generiert @dataclass-Klassen, z.B. @dataclass class User: id: int; name: str. Im Wesentlichen entkoppelt es «Datenspeicherung» von «Datenoperationen», lässt die Klasse sich auf die Beschreibung von Datenfeldern konzentrieren, während der Dekorator automatisch Boilerplate-Methoden generiert.
- Modul typing
- Python-Standardbibliothek für Typannotationen, bietet generische Typen wie List, Dict, Optional, Any, Union. Die von diesem Tool generierten List[T], Optional[Any] stammen alle aus dem typing-Modul. Python 3.9+ kann die integrierten list, dict direkt verwenden. Neben collections.abc, contextlib ist es das Kernmodul in der Python-Standardbibliothek für statische Typeinschränkungen; seit PEP 484 schrittweise zum Standard für große Projekte geworden.
- Optional[T]
- Optionaler Typ des typing-Moduls, entspricht Union[T, None], bedeutet, dass ein Feld None sein kann. Dieses Tool ordnet JSON-null Optional[Any] zu, kann manuell in Optional[str] oder andere genauere Typen geändert werden. Beachten Sie den Unterschied zwischen Optional[T] und T = None Standardwert: Ersteres ist ein Ausdruck von None auf Typebene, Letzteres eine Standardeinstellung auf Wertebene.
- List[T]
- Generischer Python-Listentyp. Dieses Tool ordnet JSON-Arrays automatisch List[T] zu, z.B. wird ein Zeichenfolgenarray zu List[str], ein Objektarray zu List[Item]. Python 3.9+ kann list[T] schreiben. Das Tool importiert standardmäßig aus dem typing-Modul, äquivalent zum integrierten list[T] von Python 3.9+; wenn das Team die neue Syntax bevorzugt, kann der Import in einem Klick ersetzt werden.
- Any
- Spezieller Typ des typing-Moduls, bedeutet, dass jeder Typ akzeptiert wird. Dieses Tool verwendet Any als Standard-Fallback für Null-Werte und leere Arrays, um Typerkennungsfehler zu vermeiden. Häufige Verwendung von Any lässt mypy/pyright ihre Prüffähigkeit verlieren, es wird empfohlen, nach Bestimmung des Feldtyps auf genaue Typen zu ändern, z.B. Optional[str], List[int].
- Pydantic BaseModel
- Datenmodell-Basisklasse der Pydantic-Bibliothek, bietet Laufzeit-Datenvalidierung, Serialisierung und Deserialisierung. Die von diesem Tool generierte Dataclass kann in einem Klick in BaseModel für die FastAPI-Request-Body-Validierung umgewandelt werden. Pydantic v2 hat die Kernvalidierungslogik in Rust neu geschrieben, mit 5-50-facher Leistungssteigerung gegenüber v1; die von diesem Tool generierte Dataclass kann auch BaseModel erben, um diese Beschleunigung zu genießen.
- FastAPI
- Modernes Python-Web-Framework, setzt auf Pydantic für automatische Request-Body-Validierung. Die von diesem Tool generierte Dataclass kann als Anfrage-/Antwortmodellvorlage für FastAPI-Routenfunktionen dienen. Basierend auf Starlette + Pydantic, generiert automatisch OpenAPI-Dokumentation, ist eines der de-facto-Standard-Python-Backend-API-Frameworks heute.
- PEP 557
- Python Enhancement Proposal, der Syntax und Verhalten des Dataclass-Dekorators definiert. Der von diesem Tool generierte Code entspricht vollständig der PEP 557-Norm. Dieser Vorschlag wurde 2017 von Eric V. Smith initiiert und lehnte sich an Designkonzepte bestehender Lösungen wie attrs, Haskell record an.
- Typannotation (Type Hint)
- Typhinweis, der nach Funktionsparametern und Variablen in Python mit : Type annotiert wird. Alle von diesem Tool generierten Dataclass-Felder verfügen über Typannotationen, die mit mypy/pyright für statische Typprüfungen verwendet werden können. Annotationen selbst beeinflussen das Laufzeitverhalten nicht, sie dienen nur der IDE-Unterstützung, statischen mypy/pyright-Prüfungen und Laufzeitvalidierungsbibliotheken (wie Pydantic).
- PEP 484
- Vorschlag zur Python-Typannotationsnorm, definiert das typing-Modul und die Generics-Syntax. Die von diesem Tool generierten List[T], Optional[T] folgen PEP 484. Dieser Vorschlag wurde gemeinsam von Guido van Rossum, Jukka Lehtosalo, Łukasz Langa und anderen verfasst und ist das grundlegende Dokument für das Python-Typannotationssystem.
- from __future__ import annotations
- Anweisung zur verzögerten Annotaitionsauswertung, eingeführt durch PEP 563, die bewirkt, dass alle Annotationen als Zeichenfolgen gespeichert werden, um Vorwärtsreferenzprobleme zu vermeiden. Die von diesem Tool generierte Dataclass kann diese Zeile hinzufügen, um die Referenzreihenfolge der Typannotationen unabhängig zu machen. Nach der Aktivierung werden alle Annotationen verzögert als Zeichenfolgen ausgewertet, vermeiden Vorwärtsreferenzprobleme und entkoppeln die Reihenfolge der Dataclass-Felder von der Referenzreihenfolge.
- model.py
- Standardmäßiger Dateiname, der von diesem Tool heruntergeladen wird, entspricht den Python-Projektkonventionen. Kann in user.py, schemas.py und andere Namen passend zur Projektstruktur umbenannt werden. Entspricht dem Benennungsstil models.py von Django und Flask; in Multimodell-Projekten kann im models-Paket in Untermodule wie user.py, order.py unterteilt werden.
Schnellreferenztabelle JSON-Typen zu Python-Typen
Das Tool leitet automatisch den entsprechenden Python-Typ entsprechend dem Typ des JSON-Werts ab:
| JSON-Wertbeispiel | Generierter Python-Typ | Erklärung |
|---|---|---|
null | Optional[Any] | Nullwerttyp unbestimmt, Optional[Any] als Fallback, kann manuell in genaue Typen wie Optional[str] geändert werden |
true / false | bool | JSON-Boolesche Werte werden direkt dem Python-bool zugeordnet |
42 | int | JSON-Ganzzahlen werden standardmäßig Python-int zugeordnet (beliebige Genauigkeit) |
3.14 | float | JSON-Gleitkommazahlen werden standardmäßig Python-float zugeordnet (doppelte Genauigkeit) |
"hello" | str | JSON-Zeichenfolgen werden Python-str zugeordnet (Unicode-Zeichenfolgen) |
["a","b"] | List[str] | Zeichenfolgenarrays werden zu List[str], Python 3.9+ kann list[str] schreiben |
[1,2,3] | List[int] | Ganzzahlarrays werden zu List[int] |
[{...},{...}] | List[Item] | Objektarrays generieren die entsprechende @dataclass aus dem ersten Element und umschließen sie dann mit List |
[] | List[Any] | Bei leeren Arrays kann der Elementtyp nicht abgeleitet werden, Any als Fallback |
{...} verschachteltes Objekt | Unabhängige @dataclass | Verschachtelte Objekte generieren eine unabhängige @dataclass-Klasse, benannt nach Großschreibung des Feldnamens |
Erklärung der Struktur des generierten Python-Codes
Der von quicktype-core für Python generierte typische Code umfasst die folgenden Teile:
| Codeteil | Beispiel | Funktion |
|---|---|---|
from dataclasses import dataclass | from dataclasses import dataclass | Importieren des Dataclass-Dekorators (Python 3.7+ Standardbibliothek) |
from typing import Any, List, Optional | from typing import Any, List, Optional | Importieren von Typannotationen aus dem typing-Modul: Any beliebiger Typ, List generische Liste, Optional optionaler Typ |
@dataclass | @dataclass
class User: | Der Dekorator bewirkt, dass die Klasse automatisch Methoden wie __init__, __repr__, __eq__ generiert |
Felddeklaration | id: int
name: str | Felddefinition mit Typannotation, wird automatisch zu __init__-Parameter |
List[T]-Feld | tags: List[str] | Repräsentiert ein JSON-Array-Feld, der Elementtyp wird aus dem ersten Element des Arrays abgeleitet |
Optional[Any]-Feld | label: Optional[Any] = None | Repräsentiert ein Feld, das null sein kann, der Standardwert None macht die Instanziierung benutzerfreundlicher |
Verschachtelte @dataclass | address: Address | Verweist auf eine andere @dataclass-Klasse im selben Modul, bildet eine stark typisierte Struktur |
Vergleich von Python-Datenmodellierungslösungen
Das Tool gibt standardmäßig @dataclass aus, aber das Python-Ökosystem bietet mehrere Datenmodellierungslösungen zur Auswahl je nach Projektanforderungen:
| Lösung | Importmethode | Laufzeitvalidierung | Typische Szenarien |
|---|---|---|---|
@dataclass | from dataclasses import dataclass | Keine (nur Typannotationen) | Interne DTOs, ORM-Modelle, reine Datencontainer; erste Wahl ohne Abhängigkeiten für Python 3.7+ |
Pydantic BaseModel | from pydantic import BaseModel | Stark (automatische Typkonvertierung + benutzerdefinierte Validatoren) | FastAPI Anfrage-/Antwortkörper, Konfigurationsdateivalidierung, prozessübergreifende Datenübertragung |
attrs @attr.s | from attrs import frozen, field | Optionale Validatoren | Hochleistungsszenarien, die slots/frozen/benutzerdefinierte Konverter erfordern |
TypedDict | from typing import TypedDict | Keine (nur Typannotation, bleibt zur Laufzeit dict) | Leichte Typhinweise, die vollständige Kompatibilität mit dict erfordern; wie mypy statische Prüfung |
dataclasses-json | from dataclasses_json import DataClassJsonMixin | Kann mit Pydantic kombiniert werden | Deserialisierungsszenarien mit .to_json()/.from_json()-Methoden für Dataclass |
msgpack + dataclass | import msgpack | Keine (Serialisierungsschicht) | Hochleistungs-Binärübertragungsszenarien (msgpack ist 30-50% kleiner als JSON) |
Tabelle Python-Versionen und Dataclass-Funktionen
Verschiedene Python-Versionen unterstützen Dataclass, Typing und Pydantic unterschiedlich, wählen Sie je nach Version:
| Python-Version | Dataclass-Unterstützung | Typing-Unterstützung | Empfohlene Verwendung |
|---|---|---|---|
3.6 und niedriger | Keine (erfordert pip install dataclasses) | Grundlegendes typing verfügbar | Nicht empfohlen; Upgrade auf 3.9+ wird empfohlen |
3.7 - 3.8 | @dataclass-Dekorator | List[T], Optional[T] erfordern Import typing | Niedrigste nutzbare Version, abwärtskompatibel mit gängigen Projekten |
3.9 - 3.10 | @dataclass + field + asdict vollständig | Kann integriertes list[T], dict[str, Any] verwenden, PEP 585 | Empfohlen: moderne Typannotationssyntax + vollständige Dataclass |
3.10+ | @dataclass(slots=True) spart Speicher | PEP 604: int | None ersetzt Optional[int] | Am besten: slots + moderne Union-Syntax |
3.11+ | @dataclass + slots + frozen Leistungsoptimierungen | Erweiterte Funktionen wie Self, TypeVarTuple, Concatenate | Erste Wahl für neue Projekte; alte Projekte können schrittweise aktualisiert werden |
3.12+ | PEP 695 Typparametersyntax (type List[T]) | Vollständige neue Typannotationssyntax | Ausprobieren modernster Funktionen; Produktion empfohlen ab 3.11+ |
Privacy & Security
Alle Operationen dieses JSON-zu-Python-Tools erfolgen vollständig lokal in Ihrem Browser: JSON-Parsing, Python-Codegenerierung und Dateidownload werden alle clientseitig über Browser-JavaScript ausgeführt, kein JSON-Inhalt, keine hochgeladenen Dateien oder generierter Code werden über das Netzwerk an irgendeinen Server gesendet. Dateiuploads verwenden die native FileReader-API des Browsers, um direkt in den Speicher zu lesen, ohne zwischengeschaltete Dienste. Kein Cookie-Tracking, keine Benutzereingaben oder Nutzungsdaten werden gesammelt. Nach dem Schließen oder Aktualisieren der Seite werden alle Ein- und Ausgaben automatisch aus dem Speicher gelöscht. Geeignet für die Verarbeitung von JSON mit API-Schlüsseln, Tokens, sensiblen Geschäftsdaten.
Authoritative References
- PythonOffizielle Python-Dokumentation - dataclasses
- PythonOffizielle Python-Dokumentation - Modul typing
- PythonPEP 557 - Data Classes
- PydanticOffizielle Pydantic-Dokumentation - Models
- FastAPIOffizielle FastAPI-Dokumentation - Request-Body
- PythonOffizielle Python-Dokumentation - Modul typing
- attrsOffizielle attrs-Dokumentation
- PythonPEP 484 - Type Hints
- JSON-Komprimierung
- CSV zu JSON
- JSON zu CSV
- JSON Diff
- JSON Escape / Unescape
- JSON Flatten
- JSON-Formatierung
- JSON-Generator
- JSONPath Online-Abfrage
- JSON zusammenführen
- JSON reparieren
- JSON Schema Validator
- JSON sortieren
- JSON Stringify
- JSON zu HTML-Tabelle
- JSON zu Java
- JSON zu Markdown
- JSON in SQL umwandeln
- JSON zu TOML
- JSON zu TypeScript
- XML zu JSON
- JSON zu XML
- YAML zu JSON
- JSON zu YAML
- JSON zu Python
- JSON zu Go
- JSON zu Rust
- JSON zu Swift
- JSON zu C#
- JSON zu C++
- JSON zu PHP