JSON u Python dataclass
Pretvorite JSON uzorak u tipizirane Python razrede — dataclass, Pydantic, TypedDict ili NamedTuple.
JSON u Python dataclass
Zalijepite JSON objekt ili niz i ovaj alat automatski određuje tip za svako polje te generiše odgovarajuće Python razrede sa punim anotacijama tipova. Odaberite stil izlaza koji odgovara vašoj kodni bazi: obični @dataclass, Pydantic BaseModel za validaciju zahtjeva i odgovora, TypedDict za tipiziranje postojećeg koda baziranog na rječnicima, ili NamedTuple za lagane nepromjenjive zapise. Ugniježđeni objekti postaju vlastiti razredi, definirani u ispravnom redoslijedu tako da datoteka radi odmah; identično oblikovani objekti — poput svakog elementa u nizu zapisa — ponovno koriste jedan razred umjesto generiranja duplikata za svaki element.
Opcije kontroliraju je li generirani kod konzervativniji ili moderniji. Opcija „Opcionalno za null polja“ pretvara polje koje je bilo null u vašem uzorku u tip Optional (ili Any) umjesto beskorisnog goloponog None; „Dodaj zadane vrijednosti“ to dopunjava s „= None“ tako da polje možete izostaviti pri kreiranju instance, a obavezna polja se automatski premještaju prije polja sa zadanim vrijednostima gdje Python sintaksa to zahtijeva. Opcija „Pseudonim za nevaljana imena polja“ upravlja JSON ključevima koji nisu valjani Python identifikatori — ključ s crticom kao „first-name“ postaje atribut first_name, ponovno povezan na originalni ključ kroz metapodatke polja u dataclass ili Field(alias=...) u Pydantic kako bi serijalizacija nastavila pravilno funkcionirati. Opcija „Koristi list[T] umjesto List[T]“ prebacuje se između modernih ugrađenih genjerika PEP 585 i starijeg stila typing.List koji neki projekti i dalje trebaju, a prebačnik budućih anotacija pretvara Optional[X]/Union[X, Y] u noviju sintaksu X | None / X | Y kroz cijeli kod.
Zaključivanje tipova razlikuje stringove, cijele brojeve, brojeve s pokretnom zarezom i booleske vrijednosti, spaja mješoviti sadržaj niza u jedan Union tip i daje nizu root objekata razumno ime razreda RootItem sa alijasom Root = list[RootItem] ispod. Budući da JSON broj ne nosi vlastiti marker int/float, broj bez točke decimalnog broja se uvijek čita kao int — nema načina da se oporavi namjerni „36.0“ nakon što je obrađen.
Sve se pokreće lokalno u vašem pregledniku: JSON koji zalijepite, često pravi API odgovor ili zapis iz baze podataka, obrađuje se i konvertuje bez slanja negdje. Kopirajte generirani Python, preuzmite ga kao .txt datoteku, ili pošaljite izlaz nazad na ulaz kako biste ga nastavili poboljšavati.