Konwerter JSON na Dart

Krok 1 / 333%

Generuj klasy modeli Dart bez dodatkowych zależności na podstawie obiektu JSON lub tablicy przykładowych obiektów. Konwerter łączy informacje ze wszystkich elementów tablicy, tworzy klasy zagnieżdżone, zachowuje oryginalne klucze JSON i wyznacza typy pól zgodne z null safety wraz z konstruktorem factory fromJson. Opcjonalne metody toJson zapewniają wynik zgodny z jsonEncode. Próbka i wygenerowany kod pozostają w tej przeglądarce, nie są wysyłane ani umieszczane w adresie URL.

Jak to działa

  1. 1

    Wklej reprezentatywną próbkę

    Użyj obiektu JSON lub tablicy obiektów. Kilka elementów pomaga wykryć pola brakujące, nullable i występujące z różnymi typami.

  2. 2

    Wybierz opcje Dart

    Nadaj nazwę klasie głównej, zdecyduj, czy wszystkie pola mają być nullable, i w razie potrzeby dodaj metody toJson.

  3. 3

    Sprawdź i wyeksportuj

    Przejrzyj wywnioskowane klasy, a następnie skopiuj kod lub pobierz lokalny plik models.dart.

Jak JSON staje się modelem Dart z null safety

Oficjalna dokumentacja biblioteki dart:convert wyjaśnia, że jsonDecode() tworzy wartości zgodne z JSON, takie jak liczby, ciągi znaków, wartości logiczne, null, listy i mapy z kluczami tekstowymi. Klasy modelu nie można bezpośrednio zakodować jako JSON, ale jsonEncode() może wywołać jej metodę toJson(). Konwerter generuje taki ręczny schemat serializacji bez adnotacji json_serializable i zależności od dodatkowych pakietów.

Załóżmy, że próbka zawiera użytkownika z zagnieżdżonym adresem. Wygenerowana klasa User ma pola final i konstruktor z nazwanymi parametrami. User.fromJson(Map<String, Object?> json) rzutuje wartości skalarne i wywołuje UserAddress.fromJson() dla zagnieżdżonego obiektu. Jeśli address nie występuje lub ma wartość null w którymkolwiek obiekcie próbki, jego typ zmienia się na UserAddress?, a factory sprawdza wartość przed utworzeniem instancji. Po włączeniu toJson modele zagnieżdżone są rekurencyjnie zamieniane na mapy obsługiwane przez jsonEncode().

Wartość zaobserwowana w JSON Wygenerowany typ Dart
Liczba całkowita int
Liczba dziesiętna double
Próbki całkowite i dziesiętne num
Tekst String
Wartość logiczna bool
Obiekt zagnieżdżony Wygenerowana klasa modelu
Jednorodna tablica List<T>
Pusta lub niezgodna tablica zagnieżdżona List<Object?>
Tylko null albo sprzeczne wartości Object?

Konwerter bada każdy obiekt w tablicy głównej, zamiast opierać się wyłącznie na pierwszym elemencie. Pole staje się nullable, gdy nie występuje w jednym z obiektów albo ma jawną wartość null. Możesz również ustawić wszystkie pola jako nullable, jeśli rzeczywiste API jest mniej przewidywalne niż próbka. Przewodnik Dart po null safety przypomina, że typy domyślnie nie dopuszczają null i wymagają znaku ?, aby ją przyjąć.

Obsługa identyfikatorów i ograniczenia wnioskowania

Klucze JSON nie muszą być poprawnymi składowymi Dart. Znaki interpunkcyjne są usuwane, słowa zamieniane na lowerCamelCase, słowa zastrzeżone otrzymują bezpieczny przyrostek, a kolizje deterministyczne przyrostki liczbowe. Oryginalny klucz pozostaje bez zmian w json['original-key'] i mapie toJson(). Nazwy klas zagnieżdżonych uwzględniają pełną ścieżkę, dzięki czemu niezależne obiekty adresów nie zostaną przypadkowo scalone.

Jedna próbka nie potwierdza całego kontraktu API. Ciągi JSON nie są automatycznie datami, identyfikatorami UUID ani enumami, a pusta tablica nie ujawnia typu elementów. Powtórzone nazwy składowych również nie gwarantują wiernej konwersji w obie strony, ponieważ parsery JSON często zachowują ostatnią wartość. Przed użyciem produkcyjnym porównaj modele z dokumentacją lub schematem API. Limity rozmiaru danych, głębokości, liczby deklaracji i wyniku utrzymują pracę przeglądarki w bezpiecznych granicach.

Najczęściej zadawane pytania

Nie. Parsowanie, wnioskowanie, generowanie kodu, kopiowanie i pobieranie odbywają się w przeglądarce. JSON i kod Dart nie są przesyłane na nasze serwery ani umieszczane w adresie URL.

Tak. Flutter korzysta z języka Dart, więc te klasy bez dodatkowych zależności można użyć w projekcie Flutter. Najpierw porównaj wywnioskowane typy z rzeczywistym kontraktem API.

Nie. Generuje ręczne metody fromJson i opcjonalne metody toJson, bez zależności od pakietu lub build_runner.

Pole zaobserwowane jako null lub brakujące staje się nullable. Jeśli próbka nie jest reprezentatywna, możesz oznaczyć wszystkie generowane pola jako nullable.

Nie. Wynik odzwierciedla tylko zaobserwowane wartości. Użyj kilku przykładowych obiektów i porównaj rezultat ze schematem lub dokumentacją dostawcy.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach