Parsowania JSON w wynikach trzepotanie w wartości NULL pól obiektu czy męska

głosy
0

Mam plik JSON w następującej strukturze:

[
 {
  key1:value1,
  key2:value2,
  key3:value3,
  key4:value4,
 },
 {
  key1:value1,
  key2:value2,
  key3:value3,
  key4:value4,
 }
]

które przeboleć wywołania HTTP. Staram się przeanalizować ten JSON w obiekty trzepotania przedsionków. Dlatego napisałem klasę:

class Foo {
 List<Model> modelsAsJson;

 Foo({this.modelsAsJson});

 Foo.fromJson(List<dynamic> jsonData) {
  modelsAsJson = jsonData.map((listItem) => Model.fromJson(listItem)).toList();
  Foo(modelsAsJson: modelsAsJson);
 }
}

I ja też napisał inną klasę dla Model:

class Model {
 String value1;
 String value2;
 String value3;
 String value4;

 Model({this.value1, this.value2, this.value3, this.value4});

 Model.fromJson(Map<String, dynamic> json) {
  Model(value1: json['key1'], value2: json['key2'], value3: json['key3'], value4: json['key4'],);
 }

 Map<String, dynamic> toJson() => {
    'key1': value1,
    'key2': value2,
    'key3': value3,
    'key4': value4
  };
}

Po uzyskaniu danych przez HTTP I analizować je w podanych obiektów tak: http.Response = http.get (urlHere); końcowe decodedJson = jsonDecode (response.body); wynik = Foo.fromJson (decodedJson) .modelsAsJson;

Po parsowania wynik dostaje prawidłową długość od modelsAsJsonale każdy modelw tym wykazie hast value1..value4 będącego nulls. Co ja robię źle?

Utwórz 10/10/2019 o 00:52
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Spróbuj wymienić swoją klasę modelu z poniżej

// To parse this JSON data, do
//
//     final model = modelFromJson(jsonString);

import 'dart:convert';

List<Model> modelFromJson(String str) => List<Model>.from(json.decode(str).map((x) => Model.fromJson(x)));

String modelToJson(List<Model> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Model {
    String key1;
    String key2;
    String key3;
    String key4;

    Model({
        this.key1,
        this.key2,
        this.key3,
        this.key4,
    });

    factory Model.fromJson(Map<String, dynamic> json) => Model(
        key1: json["key1"] == null ? null : json["key1"],
        key2: json["key2"] == null ? null : json["key2"],
        key3: json["key3"] == null ? null : json["key3"],
        key4: json["key4"] == null ? null : json["key4"],
    );

    Map<String, dynamic> toJson() => {
        "key1": key1 == null ? null : key1,
        "key2": key2 == null ? null : key2,
        "key3": key3 == null ? null : key3,
        "key4": key4 == null ? null : key4,
    };
}

i skorzystać z poniższego kodu do analizowania

List<Model> modelList = modelFromJson('Your Json String);
Odpowiedział 10/10/2019 o 08:08
źródło użytkownik

głosy
0

W twoim przypadku Model.fromJson(Map<String, dynamic> json)jest nazwany konstruktor, więc Wewnątrz wsporniki należy inicjowanie zrobić. Zamiast tego jesteś po prostu tworząc nowy Modelwewnątrz konstruktora i nic nie robić z niego. Dlatego pola w modelu przebywają niezainicjowanymi ( nulldomyślnie).

Powinno być napisane tak:

Model.fromJson(Map<String, dynamic> json) {
  value1 = json['key1'];
  value2 = json['key2'];
  value3 = json['key3'];
  value4 = json['key4'];
}

Można też użyć konstruktora fabryki:

factory Model.fromJson(Map<String, dynamic> json) => Model(
    value1: json['key1'],
    value2: json['key2'],
    value3: json['key3'],
    value4: json['key4'],
  );
Odpowiedział 10/10/2019 o 01:23
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more