Hoppa till innehåll
100% lokalt

JSON till Python dataclass

Konvertera ett JSON-exempel till typkontrollerade Python-klasser — dataclass, Pydantic, TypedDict eller NamedTuple.

Inmatning
Utmatning

JSON till Python dataclass

Klistra in ett JSON-objekt eller -array och det här verktyget härleder automatiskt en typ för varje fält och genererar motsvarande Python-klasser med fullständiga typannoteringar. Välj utdatastil som passar din kodbas: enkel @dataclass, en Pydantic BaseModel för validering av förfrågningar och svar, en TypedDict för typning av befintlig ordbok-baserad kod, eller en NamedTuple för lätta oföränderliga poster. Kapslade objekt blir sina egna klasser, definierade i rätt ordning så filen fungerar omedelbar; identiskt formade objekt — som varje objekt i en array av poster — återanvänder en enda klass istället för att generera en kopia för var och en.

Alternativen styr hur konservativ eller modern den genererade koden är. ”Valfritt för null-fält” gör ett fält som var null i ditt exempel till en Optional-typ (eller Any) istället för den värdelösa bare None; ”Lägg till standardvärden” kompletterar det med ”= None” så fältet kan utelämnas när du skapar en instans, och obligatoriska fält ordnas automatiskt före fält med standardvärden där Python kräver det. ”Alias för ogiltiga fältnamn” hanterar JSON-nycklar som inte är giltiga Python-identifierare — en bindestreck-nyckel som ”first-name” blir attributet first_name, kopplad tillbaka till den ursprungliga nyckeln genom fältmetadata i dataclass eller Field(alias=...) i Pydantic så serialisering fortsätter att fungera. ”Använd list[T] istället för List[T]” växlar mellan moderna PEP 585 inbyggda generiska typer och äldre typing.List-stil som vissa kodbaser fortfarande behöver, och __future__-importväxeln byter Optional[X]/Union[X, Y] till den nyare X | None / X | Y-syntaxen genomgående.

Typinferens skiljer mellan strängar, heltal, flyttal och booleska värden, slår samman blandat array-innehål till en enda Union-typ, och ger ett root-array av objekt ett rimligt RootItem-klassnamn med ett Root = list[RootItem]-alias nedan. Eftersom ett JSON-tal inte bär sin egen int/float-markering läses ett tal utan decimalpunkt alltid som int — det finns inget sätt att återställa ett avsiktligt ”36.0” efter parsning.

Allt körs lokalt i din webbläsare: den JSON du klistrar in — ofta ett verkligt API-svar eller databaspost — parsas och konverteras utan att skickas någonstans. Kopiera den genererade Python, ladda ned den som .txt-fil, eller skicka utdata tillbaka till indata för att fortsätta förbättra det.

FAQ

Vilka utdatastilar stöds?
Fyra: @dataclass (standardbiblioteksstil), Pydantic BaseModel (för validering och JSON-bearbetning), TypedDict (typannoteringar över en vanlig ordbok utan körtidsklass) och NamedTuple (oföränderliga poster som liknar tuplar).
Hur hanteras kapslade objekt och objekt-arrayer?
Varje distinkt objektform blir sin egen klass, uppkallad efter fältet som innehåller det och definierat före klassen som refererar till det. Objekt med identiska fältuppsättningar och typer återanvänder en klass istället för att duplicera — en array av likformaterade poster genererar en enda item-klass.
Vad händer med JSON-nycklar som inte är giltiga Python-identifierare?
De saneras till ett giltigt attributnamn (t.ex. ”first-name” → first_name). Med ”Alias för ogiltiga fältnamn” aktiverat bevaras den ursprungliga nyckeln genom ett inbyggt alias (fältmetadata i dataclass, Field(alias=...) i Pydantic) eller en efterföljande kommentar för TypedDict och NamedTuple, som saknar inbyggd aliasmekanism.
Kan det skilja int och float tillförlitligt?
Det klassificerar varje tal efter om det har en bråkdel i ditt exempel, men JSON själv skiljer inte int från float för heltal — ett värde skickat som 36.0 är omöjligt att skilja från 36 efter parsning, så det läses som int.
Laddas min JSON upp någonstans?
Nej. Parsning och kodgenerering körs helt i din webbläsare — den JSON du klistrar in och Python den producerar lämnar aldrig din enhet.