nesnelerin en alanların NULL değerleri Flutter sonuçlarında JSON ayrıştırma

oy
0

Aşağıdaki yapıda bir JSON dosyası vardır:

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

ki ben bir HTTP çağrısı üzerine olsun. Ben çarpıntı nesneleri içine bu JSON ayrıştırmak çalışıyorum. Bu yüzden bir sınıf yazdı:

class Foo {
 List<Model> modelsAsJson;

 Foo({this.modelsAsJson});

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

Ve ayrıca başka bir sınıf için yazdığı 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
  };
}

HTTP üzerinden veri aldıktan sonra böyle verilen nesneler ayrıştırmak: http.Response = http.get (URLburaya); Nihai decodedJson = jsonDecode (response.body); Sonuç = Foo.fromJson (decodedJson) .modelsAsJson;

Sonuç ayrıştırma sonra doğru gelen uzunluğunu alır modelsAsJsonama her modelo liste hast value1..value4 olma nulls. Neyi yanlış yapıyorum?

Oluştur 10/10/2019 saat 00:52
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Aşağıdaki ile model sınıf değiştirmeyi deneyin

// 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,
    };
}

ve ayrıştırmak için kod aşağıda kullanmak

List<Model> modelList = modelFromJson('Your Json String);
Cevap 10/10/2019 saat 08:08
kaynak kullanıcı

oy
0

Senin durumunda Model.fromJson(Map<String, dynamic> json)orada parantez yapılması başlatılıyor gerektiğini içeride yüzden adlandırılmış yapıcı olduğunu. Bunun yerine sadece yeni oluştururken Modelkurucu içinde ve onunla bir şey yapmak. Modelinizdeki alanlar (başlatılmamış kalıyorum İşte bu nedenle nullvarsayılan olarak).

Böyle yazılmalıdır:

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

Yoksa fabrika yapıcı kullanabilirsiniz:

factory Model.fromJson(Map<String, dynamic> json) => Model(
    value1: json['key1'],
    value2: json['key2'],
    value3: json['key3'],
    value4: json['key4'],
  );
Cevap 10/10/2019 saat 01:23
kaynak kullanıcı

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