Preskoči na vsebino
100% lokalno

JSON v razred podatkov Python

Pretvorite vzorec JSON v tipizirane razrede Python — dataclass, Pydantic, TypedDict ali NamedTuple.

Vhod
Izhod

JSON v razred podatkov Python

Prilepite objekt JSON ali polje in to orodje samodejno ugotovi tip za vsako polje ter ustvari ustrezne razrede Python s polnimi opombami tipov. Izberite slog rezultata, ki se ujema z vašo kodno bazo: navadni @dataclass, Pydantic BaseModel za validacijo zahtevkov in odgovorov, TypedDict za tipiziranje obstoječe kode na osnovi slovarjev ali NamedTuple za lahke nespreminjive zapise. Ugnezdeni objekti postanejo lastni razredi, definirani v pravem vrstnem redu, tako da se datoteka takoj izvede; enako oblikovani objekti — kot vsak element v polju zapisov — ponovno uporabijo en razred namesto ustvarjanja duplikata za vsak element.

Možnosti nadzorujejo, ali je ustvarjena koda bolj konzervativna ali sodobna. Možnost „Opciono za null polja“ pretvori polje, ki je bilo null v vašem vzorcu, v tip Optional (ali Any) namesto neuporabnega samega None; „Dodaj privzete vrednosti“ to dopolni z „= None“, tako da polje lahko izpustite pri ustvarjanju primerka, obvezna polja pa se samodejno premaknejo pred polja s privzetimi vrednostmi, kadar to zahteva Python skladnja. Možnost „Psevdonim za neveljavna imena polj“ upravlja ključe JSON, ki niso veljavni identifikatorji Python — ključ s pomišljajem kot „first-name“ postane atribut first_name, ponovno povezan na originalni ključ preko metapodatkov polja v dataclass ali Field(alias=...) v Pydantic, tako da serijalizacija deluje pravilno. Možnost „Uporabi list[T] namesto List[T]“ preklanja med sodobnimi vgrajenim stiski generikov PEP 585 in starejšim slogom typing.List, ki ga nekateri projekti še potrebujejo, preklopka za prihodnje opombe pa pretvori Optional[X]/Union[X, Y] v novejšo sintakso X | None / X | Y po vsem kodu.

Sklepanje tipov loči nize, cela števila, plavajoča števila in logične vrednosti, meša mešano vsebino polja v en tip Union in daje polju root objektov razumno ime razreda RootItem z imenovakom Root = list[RootItem] spodaj. Ker številka JSON nima lastne oznake int/float, se število brez decimalne točke vedno prebere kot int — ni načina za obnovitev namerne „36.0“ po obdelavi.

Vse se izvaja lokalno v vašem brskalniku: JSON, ki ga prilepite, pogosto pravi odgovor API ali zapis iz baze podatkov, se obdela in pretvori brez pošiljanja nekam. Kopirajte ustvarjene Python, ga preuzmite kot datoteko .txt ali pošljite rezultat nazaj v vnos, da ga še naprej izboljšate.

FAQ

Kateri slogi rezultata so podprti?
Štiri: @dataclass (privzeta knjižnica), Pydantic BaseModel (za validacijo in razčlenjevanje JSON), TypedDict (opombe tipov čez preprost slovar brez razreda runtime) in NamedTuple (nespreminjivi zapisi podobni terki).
Kako se obidejo ugnezdeni objekti in polja objektov?
Vsaka različna oblika objekta postane lastni razred, imenovan po polju, ki ga vsebuje, in definiran pred razredom, ki nanj napotuje. Objekti z enako skupino polj in tipov ponovno uporabijo en razred namesto podvajanja — polje zapisov enake oblike ustvari en razred stavke.
Kaj se zgodi s ključi JSON, ki niso veljavni identifikatorji Python?
Očistijo se v veljavno ime atributa (npr. „first-name“ → first_name). Kadar je možnost „Psevdonim za neveljavna imena polj“ vključena, se originalni ključ ohrani prek domačega psevdonima (metapodatki polja v dataclass, Field(alias=...) v Pydantic) ali komentarja na koncu za TypedDict in NamedTuple, ki nimata vgrajenega mehanizma psevdonima.
Ali lahko zanesljivo razlokuje int in float?
Razvrsti vsako številko glede na to, ali ima ulomljeni del v vašem vzorcu, vendar JSON sam ne loči int od float za cela števila — vrednost poslana kot 36.0 je po razčlenjevanju nerazločna od 36, zato se prebere kot int.
Je moj JSON negdje preslikan?
Ne. Razčlenjevanje in generiranje kode se izvajata v celoti v vašem brskalniku — JSON, ki ga prilepite, in Python, ki ga ustvari, nikoli ne zapustita vašo napravo.