Přeskočit na obsah
100% lokálně

JSON na Python dataclass

Převeďte JSON vzorek na typované třídy Python — dataclass, Pydantic, TypedDict nebo NamedTuple.

Vstup
Výstup

JSON na Python dataclass

Vložte objekt JSON nebo pole a tento nástroj automaticky určí typ pro každé pole a vygeneruje odpovídající třídy Python s úplnými anotacemi typů. Vyberte si styl výstupu, který vyhovuje vaší kódové základně: klasické @dataclass, Pydantic BaseModel na ověřování a zpracování JSON, TypedDict na typování existujícího kódu založeného na slovnících, nebo NamedTuple pro lehké neměnné záznamy. Vnořené objekty se stanou vlastními třídami, seřazenými v správném pořadí, takže soubor okamžitě funguje; objekty s identickým tvarem — jako každá položka v poli záznamů — znovu používají jednu třídu místo vytvoření duplicitní verze.

Možnosti řídí, zda je generovaný kód konzervativní nebo moderní. Možnost „Optional pro null pole“ změní pole, které bylo null ve vašem vzorku, na typ Optional (nebo Any) místo bezvýznamného pouhého None; „Přidat výchozí hodnoty“ to doplní o „= None“, takže pole lze vynechat při vytváření instance, a povinná pole se automaticky přesunou před pole s výchozími hodnotami podle požadavků syntaxe Python. Možnost „Alias pro neplatné názvy polí“ zpracovává klíče JSON, které nejsou platnými identifikátory Python — klíč s pomlčkou jako „first-name“ se stane atributem first_name, napojen zpět na původní klíč prostřednictvím metadat pole v dataclass nebo Field(alias=...) v Pydantic, takže serializace pokračuje bez ztrát. Možnost „Použít list[T] místo List[T]“ přepíná mezi moderními vestavěnými generiky PEP 585 a starším stylem typing.List, který některé projekty stále vyžadují, a přepínač pro budoucí anotace změní Optional[X]/Union[X, Y] na novější syntaxi X | None / X | Y v celém kódu.

Určování typu rozlišuje řetězce, celá čísla, desetinná čísla a booleovské hodnoty, sjednocuje smíšený obsah polí do jednoho typu Union a dává poli kořenového objektu rozumný název třídy RootItem s aliasem Root = list[RootItem] níže. Protože číslo JSON nemá vlastní značku int/float, číslo bez desetinné čárky se vždy čte jako int — není možné obnovit záměrné „36.0“ po jeho zpracování.

Všechno běží lokálně ve vašem prohlížeči: JSON, který vložíte, obvykle skutečná odpověď API nebo záznam z databáze, se zpracuje a převede, aniž by kdy odešel. Zkopírujte vygenerovaný Python, stáhněte si jej jako soubor .txt, nebo pošlete výstup zpět do vstupu, abyste jej dále vylepšili.

Časté dotazy

Jaké styly výstupu jsou podporovány?
Čtyři: @dataclass (standardní styl knihovny), Pydantic BaseModel (na ověřování a zpracování JSON), TypedDict (anotace typů přes holý slovník bez runtime třídy) a NamedTuple (neměnné záznamy podobné n-tici).
Jak se zpracovávají vnořené objekty a pole objektů?
Každý odlišný tvar objektu se stane vlastní třídou, pojmenovanou podle pole, které jej obsahuje a definované před třídou, která na něj odkazuje. Objekty se stejnou sadou polí a typů znovu používají jednu třídu místo vytvoření duplicity — pole záznamů se stejným tvarem generuje jednu třídu položky.
Co se stane s klíči JSON, které nejsou platnými identifikátory Python?
Jsou očištěny na platný název atributu (např. „first-name“ → first_name). Pokud je zapnuta možnost „Alias pro neplatné názvy polí“, je původní klíč zachován prostřednictvím nativního aliasu (metadata pole v dataclass, Field(alias=...) v Pydantic) nebo komentáře na konci pro TypedDict a NamedTuple, které nemají vestavěný mechanismus aliasu.
Může to spolehlivě rozlišit int a float?
Klasifikuje každé číslo podle toho, zda má ve vašem vzorku zlomkovou část, ale samotný JSON nerozlišuje int od float pro celá čísla — hodnota poslaná jako 36.0 je po zpracování nerozlišitelná od 36, takže se čte jako int.
Je můj JSON někde nahrán?
Ne. Zpracovávání a generování kódu probíhají výhradně ve vašem prohlížeči — JSON, který vložíte, a Python, který vyprodukuje, nikdy neopustí vaše zařízení.