Przejdź do treści

JSON na klasę Dart

Konwertuj próbkę JSON na klasę Dart z fromJson, toJson i zagnieżdżonymi modelami.

Wejście
Wynik

JSON na klasę Dart

Wklej próbkę JSON i to narzędzie wnioskuje kształt danych i generuje pasującą klasę Dart — taką, którą w przeciwnym razie musiałbyś ręcznie napisać dla modelu Flutter. Obiekty zagnieżdżone staną się własnymi klasami, pola typu `List<...>` staną się typowanymi polami, a każda klasa ma nazwany konstruktor, fabrykę `fromJson` i metodę `toJson`, dzięki czemu wynik można bezpośrednio wstawić do projektu Flutter lub Dart.

Opcje kontrolują styl wygenerowanego kodu. "Nazwa klasy" ustawia klasę root, zagnieżdżone klasy są nazwane po kluczu JSON, który je wprowadził. "Bezpieczeństwo null z wymaganymi polami" oznacza pola, które występują w każdej próbce jako `required` z typem bez wartości null, oraz pola, które czasami brakuje lub mają wartość null, jako nullable i opcjonalne — wyłącz to, aby każde pole było nullable, co jest bardziej tolerancyjne dla niespójnych odpowiedzi API. "Adnotacje json_serializable" przełącza się z ręcznie napisanych treści `fromJson`/`toJson` na adnotacje `@JsonSerializable()` i `@JsonKey`, które delegują do wygenerowanego pliku części `.g.dart` dla projektów, które już używają tego pakietu i build_runner. "Pola finalne" czyni klasę niezmienną, "Generuj copyWith" dodaje metodę tworzenia zmodyfikowanej kopii bez mutacji oryginału, a "Generuj == i hashCode" dodaje równość wartości, aby dwie instancje z tymi samymi wartościami pól porównywały się jako równe. "Wcięcie" przełącza wygenerowany kod między 2 i 4 spacjami.

Kiedy ten sam kształt obiektu się powtarza — na przykład tablica elementów, które wszystkie mają te same pola — narzędzie ponownie używa jednej klasy zamiast generowania duplikatu dla każdego wystąpienia, a pole brakujące tylko u niektórych elementów tablicy jest prawidłowo wnioskowane jako opcjonalne, a nie wymagane. Klucze JSON, które nie są prawidłowymi identyfikatorami Dart, używają innego nazewnictwa lub kolidują z słowem kluczowym lub wygenerowaną nazwą metody (taką jak `copyWith` lub `hashCode`), są automatycznie zmieniane po stronie Dart, podczas gdy oryginalny klucz jest zachowywany do kodowania i dekodowania.

Wszystko działa lokalnie w Twojej przeglądarce: próbka JSON nigdy nie jest nigdzie przesyłana, co ma znaczenie, jeśli zawiera rzeczywiste dane użytkownika lub kształt odpowiedzi wewnętrznego API. Skopiuj klasę, pobierz ją jako plik .txt lub wyślij dane wyjściowe z powrotem do wejścia, aby móc dalej konwertować jeden zagnieżdżony element.

Częste pytania

Jak obsługiwane są obiekty i tablice zagnieżdżone?
Każdy zagnieżdżony obiekt staje się własną klasą Dart nazwaną po polu, które go introdukowało, a tablica obiektów staje się typowanym List<YourClass>. Jeśli ten sam kształt pojawia się więcej niż raz, narzędzie ponownie używa jedną klasę zamiast generowania duplikatu dla każdego wystąpienia.
Co dokładnie zmieni "Bezpieczeństwo null z wymaganymi polami"?
Gdy jest włączone, pole, które narzędzie widzi w każdej próbce, otrzyma typ bez wartości null i parametr konstruktora `required`, pole, które czasami brakuje lub ma wartość null, otrzyma typ nullable bez słowa kluczowego `required`. Wyłączenie tego sprawi, że każde pole będzie nullable i opcjonalne, co jest bardziej tolerancyjne dla interfejsów API, których odpowiedzi się różnią.
Czy potrzebuję pakietu json_serializable?
Tylko jeśli włączysz opcję "Adnotacje json_serializable", która emituje @JsonSerializable()/@JsonKey i dyrektywę części oczekującą wygenerowanego pliku `.g.dart` z build_runner. Wyłącz to, a narzędzie zamiast tego napiszę proste, bezpłatne metody fromJson/toJson bez zależności.
Czy może prawidłowo wnioskować typ pola numerycznego?
Tak. Pole, które jest zawsze liczbą całkowitą, staje się int; jeśli jakakolwiek wartość próbki ma punkt dziesiętny, całe pole jest rozszerzane na double, aby żadna wartość nie została obcięta.
Czy moja próbka JSON jest wysyłana gdziekolwiek?
Nie. Klasa jest generowana całkowicie w Twojej przeglądarce — Twoja próbka JSON nigdy nie opuści Twojego urządzenia.