Preskoči na vsebino
100% lokalno

JSON v Dart razred

Pretvori vzorec JSON v Dart razred s fromJson, toJson in ugniježđenimi modeli.

Vhod
Izhod

JSON v Dart razred

Prilepite vzorec JSON in to orodje sklepa obliko podatkov in generiše ustrezen Dart razred — tak, kot bi ga drugače napisali za Flutter model. Ugniježđeni objekti postanejo svoje razrede, nizi postanejo tipizirana `List<...>` polja, in vsak razred ima poimenovani konstruktor, `fromJson` tovarno metodo in `toJson` metodo, tako da rezultat ravno gre v Flutter ali Dart projekt.

Možnosti nadzorujejo stil generirane kode. "Naziv razreda" nastavi korenski razred; ugniježđeni razredi so poimenovani po ključu JSON, ki ga je predstavil. "Varnost pred ničlo s zahtevanimi polji" označi polja, ki se pojavijo v vsakem vzorcu, kot `required` s tipom, ki ne sme biti ničlen, in polja, ki se včasih ne pojavijo ali so ničelna, kot ničelno in izbirno — izklopite ga, da bi bila vsa polja ničelna namesto tega, kar je bolj strpno do neusklajenih odgovorov API. "json_serializable opombe" preklopi s ročno napisanih `fromJson`/`toJson` teles na `@JsonSerializable()` in `@JsonKey` opombe, ki delegira generirani datoteki `.g.dart` part, za projekte, ki že uporabljajo ta paket in build_runner. "Končna polja" naredijo razred nespremenljiv; "Generiraj copyWith" doda metodo za ustvarjanje spremenjene kopije brez mutiranja izvirnika, in "Generiraj == in hashCode" doda enakost vrednosti, tako da sta dve instanci z enakimi vrednostmi polj enaki. "Zamik" preklopi generirano kodo med 2 in 4 presledkami.

Ko se ista oblika objekta ponovi — niz elementov, ki imajo vsa ista polja, na primer — orodje ponovno uporabi en razred namesto da generiše duplikat za vsako pojavitev, in polje, ki manjka le nekaterim elementom v nizu, je pravilno sklepano kot izbirno namesto zahtevanega. Ključi JSON, ki niso veljavni Dart identifikatorji, uporabljajo drugačno ehranko ali se spopadajo s ključno besedo ali generirano imena metode (kot `copyWith` ali `hashCode`), se samodejno preimenujejo na strani Dart, medtem ko se izvirni ključ ohrani za kodiranje in dekodiranje.

Vse se izvršuje lokalno v vašem brskalniku: vzorec JSON se nikoli ne pošlje nikamor, kar je pomembno, če vsebuje resnične podatke uporabnika ali obliko odgovora notranjega API-ja. Kopirajte razred, ga prenesite kot datoteko .txt ali pošljite rezultat nazaj v vnos, da pretvori en ugniježđeni del naprej.

FAQ

Kako se ravna z ugniježđenimi objekti in polji?
Vsak ugniježđeni objekt postane samostojni Dart razred, poimenovan po polju, ki ga je predstavil, in niz objektov postane tipiziran List<VašRazred>. Če se ista oblika pojavi večkrat, orodje ponovno uporabi en razred namesto da generiše duplikat za vsako pojavitev.
Kaj se pravzaprav spremeni z "Varnostjo pred ničlo s zahtevanimi polji"?
Ko je vključeno, polje, ki ga orodje vidi v vsakem vzorcu, dobi tip, ki ne sme biti ničeln, in zahtevan parameter konstruktorja; polje, ki se včasih ne pojavi ali je ničelno, dobi ničeln tip brez ključne besede `required`. Izklapljanjem naredite vsa polja ničelna in izbirna, kar je bolj strpno do API-jev, katerih odgovori se razlikujejo.
Ali potrebujem paket json_serializable?
Samo če vključite možnost "json_serializable opombe", ki oddaja @JsonSerializable()/@JsonKey in part direktivo, ki pričakuje generirano datoteko .g.dart iz build_runner-ja. Jo izklopite in orodje namesto tega piše navadne, neodvisne metode fromJson/toJson.
Ali lahko pravilno sklepa tip številčnega polja?
Da. Polje, ki je vedno celo število, postane int; če ima katera koli vrednost vzorca decimalno točko, se celo polje razširi na double, da ne bi bila nobena vrednost skrajšana.
Ali je moj JSON naložen nekje?
Ne. Razred se generiše v celoti v vašem brskalniku — vaš vzorec JSON nikoli ne zapusti vašo napravo.