JSON till Dart-konverterare

Steg 1 / 333%

Skapa Dart-modellklasser utan beroenden från ett JSON-objekt eller en uppsättning exempelobjekt. Konverteraren slår samman alla undersökta arrayelement, skapar nästlade klasser, bevarar de ursprungliga JSON-nycklarna och härleder nullsäkra fälttyper med en factory-konstruktor för fromJson. Lägg till toJson-metoder när du behöver utdata som fungerar med jsonEncode. Exemplet och den skapade koden stannar i webbläsaren och laddas aldrig upp eller läggs i webbadressen.

Så fungerar det

  1. 1

    Klistra in ett representativt exempel

    Använd ett JSON-objekt eller en array med objekt. Flera element visar lättare saknade, nullable och oliktypade fält.

  2. 2

    Välj Dart-alternativ

    Namnge rotklassen, välj om alla fält ska vara nullable och lägg till toJson-metoder vid behov.

  3. 3

    Granska och exportera

    Kontrollera de härledda klasserna och kopiera koden eller hämta en lokal models.dart-fil.

Så blir JSON nullsäkra Dart-modeller

Den officiella dokumentationen för dart:convert förklarar att jsonDecode() ger JSON-kompatibla värden som tal, strängar, booleska värden, null, listor och mappar med strängnycklar. En modellklass kan inte kodas direkt som JSON, men jsonEncode() kan anropa dess toJson()-metod. Konverteraren skapar detta manuella serialiseringsmönster utan json_serializable-annoteringar eller paketberoenden.

Anta att ett exempel innehåller en användare med en nästlad adress. Den skapade klassen User har final-fält och en konstruktor med namngivna parametrar. User.fromJson(Map<String, Object?> json) typkonverterar skalära värden och anropar UserAddress.fromJson() för det nästlade objektet. Om address saknas eller är null i något undersökt objekt blir typen UserAddress?, och factory-funktionen kontrollerar värdet innan objektet skapas. När toJson är aktiverat konverteras nästlade modeller rekursivt till mappar som jsonEncode() accepterar.

Observation i JSON Skapad Dart-typ
Heltal int
Decimaltal double
Heltals- och decimalexempel num
Text String
Booleskt värde bool
Nästlat objekt Skapad modellklass
Enhetlig array List<T>
Tom eller oförenlig nästlad array List<Object?>
Endast null eller motstridiga värden Object?

Konverteraren granskar varje objekt i en rotarray i stället för att bara lita på det första elementet. Ett fält blir nullable när det saknas i ett element eller uttryckligen är null. Du kan även göra alla fält nullable om det verkliga API:t är mindre förutsägbart än exemplet. Darts guide om null safety påpekar att typer som standard inte är nullable och behöver ? för att acceptera null.

Hantering av identifierare och begränsningar

JSON-nycklar behöver inte vara giltiga Dart-medlemmar. Skiljetecken tas bort, ord omvandlas till lowerCamelCase, reserverade ord får ett säkert suffix och kollisioner får deterministiska siffersuffix. Den ursprungliga nyckeln förblir oförändrad i json['original-key'] och i toJson()-mappen. Nästlade klassnamn använder hela sökvägen så att oberoende adressobjekt inte slås samman av misstag.

Ett enstaka exempel bevisar inte ett API-kontrakt. JSON-strängar är inte automatiskt datum, UUID:er eller enums, och en tom array avslöjar ingen elementtyp. Dubbla medlemsnamn kan inte heller konverteras tillförlitligt fram och tillbaka, eftersom JSON-tolkar ofta behåller det sista värdet. Jämför de skapade modellerna med API-dokumentationen eller schemat innan de används i produktion. Gränser för indata, djup, härledda deklarationer och utdata håller webbläsarens arbete under kontroll.

Vanliga frågor

Nej. Tolkning, inferens, kodgenerering, kopiering och hämtning sker i webbläsaren. JSON och Dart-kod skickas inte till våra servrar och läggs inte i webbadressen.

Ja. Flutter använder Dart, så klasserna utan beroenden kan användas i ett Flutter-projekt. Jämför först de härledda typerna med det verkliga API-kontraktet.

Nej. Verktyget skapar manuella fromJson-metoder och valfria toJson-metoder, utan beroende av paket eller build_runner.

Ett fält som observeras som null eller saknas blir nullable. Du kan göra alla fält nullable om exemplet inte är representativt.

Nej. Resultatet speglar bara observerade värden. Använd flera exempelobjekt och jämför med leverantörens schema eller dokumentation.

Relaterade verktyg

Verktyget finns på andra språk