White Rabbit
White Rabbit

Reputation: 25

Flutter/Dart: JSON parsing

Is it possible to get a list from json without looping the jsonResponse? In the sample below, i want to get list of language targetList = ["Pascal", "Python","SQL"]

{
   "eBooks":[
      {
         "language":"Pascal",
         "edition":"third"
      },
      {
         "language":"Python",
         "edition":"four"
      },
      {
         "language":"SQL",
         "edition":"second"
      }
   ]
}

Upvotes: 1

Views: 80

Answers (3)

Jitesh Mohite
Jitesh Mohite

Reputation: 34210

void main() {
  String json = "{\"eBooks\":[{\"language\":\"Pascal\",\"edition\":\"third\"},{\"language\":\"Python\",\"edition\":\"four\"},{\"language\":\"SQL\",\"edition\":\"second\"}]}";
  JsonData result = JsonData.fromJson(jsonDecode(json));
  List<String> targetList = [];
  for(var book in result.eBooks!) {
    targetList.add(book.language!);
  }
  print(targetList); // [Pascal, Python, SQL]
}

Json Object:

class JsonData {
  List<EBooks>? _eBooks;

  List<EBooks>? get eBooks => _eBooks;

  JsonData({List<EBooks>? eBooks}) {
    _eBooks = eBooks;
  }

  JsonData.fromJson(dynamic json) {
    if (json["eBooks"] != null) {
      _eBooks = [];
      json["eBooks"].forEach((v) {
        _eBooks?.add(EBooks.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    var map = <String, dynamic>{};
    if (_eBooks != null) {
      map["eBooks"] = _eBooks?.map((v) => v.toJson()).toList();
    }
    return map;
  }
}

class EBooks {
  String? _language;
  String? _edition;

  String? get language => _language;

  String? get edition => _edition;

  EBooks({String? language, String? edition}) {
    _language = language;
    _edition = edition;
  }

  EBooks.fromJson(dynamic json) {
    _language = json["language"];
    _edition = json["edition"];
  }

  Map<String, dynamic> toJson() {
    var map = <String, dynamic>{};
    map["language"] = _language;
    map["edition"] = _edition;
    return map;
  }
}

Upvotes: 1

Have a look at the example below

void main() {
  var map = {
    "eBooks": [
      {"language": "Pascal", "edition": "third"},
      {"language": "Python", "edition": "four"},
      {"language": "SQL", "edition": "second"}
    ]
  };
  var lst = map["eBooks"].map((e) => e["language"]).toList();
  print(lst.length);
  lst.forEach((l) {
    print(l);
  });
}

Upvotes: 1

Fatih Kur&#231;enli
Fatih Kur&#231;enli

Reputation: 31

First you need to create a model class. Then we see a second value in which the other variables are kept. Then you can access the list in it by creating an object from this class. You can translate your model to JSON to Dart language through these sites. jsontodart jsontodart2

 class TargetList {
  List<EBooks> eBooks;

  TargetList({this.eBooks});

  TargetList.fromJson(Map<String, dynamic> json) {
    if (json['eBooks'] != null) {
      eBooks = new List<EBooks>();
      json['eBooks'].forEach((v) {
        eBooks.add(new EBooks.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.eBooks != null) {
      data['eBooks'] = this.eBooks.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class EBooks {
  String language;
  String edition;

  EBooks({this.language, this.edition});

  EBooks.fromJson(Map<String, dynamic> json) {
    language = json['language'];
    edition = json['edition'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['language'] = this.language;
    data['edition'] = this.edition;
    return data;
  }
}

Upvotes: 0

Related Questions