Lee Wei Chin
Lee Wei Chin

Reputation: 53

How can i deserialize my json in Flutter/dart

I'm quite new to flutter and right now i'm stucked in desterilize the json string into my class. Appreciate your help on this.

This is my json

[
 {   
    "itemno": "4800888136473",
    "itemname": "AXE DEO AFRICA 150ML",  
  },
  {  
    "itemno": "4800888141125",
    "itemname": "AXE DEO BODYSPRAY DARK TMPTTN 150ML",   
  }
]

And my JSON Class

class ListItemList{
  ListItemList({   
    this.itemno,
    this.itemname,   
  });


  String itemno;
  String itemname;
  

  factory ListItemList.fromJson(Map<String, dynamic> json) =>
      ListItemList(       
        itemno: json["itemno"],
        itemname: json["itemname"],       
      );
}

How i call

  List<ListItemList> result =
              ListItemList.fromJson(jsonDecode(response.body));

Upvotes: 0

Views: 1968

Answers (4)

Ravi Ashara
Ravi Ashara

Reputation: 1196

Check this link "https://app.quicktype.io/"

And paste your json code left side and add class model name.

for eg.

import 'dart:convert';

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

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

class User {
    User({
        this.itemno,
        this.itemname,
    });

    String itemno;
    String itemname;

    factory User.fromJson(Map<String, dynamic> json) => User(
        itemno: json["itemno"] == null ? null : json["itemno"],
        itemname: json["itemname"] == null ? null : json["itemname"],
    );

    Map<String, dynamic> toJson() => {
        "itemno": itemno == null ? null : itemno,
        "itemname": itemname == null ? null : itemname,
    };
}

//Add below code in service

static Future<List<User>> getUsers() async {
 List<User> users = usersFromJson(response.body));
 return users;
}

// call service in specific page

List _users;

@override
  void initState() {
    super.initState();
    ApiService.getUsers().then((value) {
          setState(() {
            _users = value;
          });
        })
}

Upvotes: 1

NaKib
NaKib

Reputation: 572

Go to this URL and paste your JSON. It will convert it to both fromJson (json to dart object conversion) and toJson (dart object to json conversion) function.

Here is as example of fromJson and toJosn according to the Json you provided

class List {
  List<Items> items;

  List({this.items});

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

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

class Items {
  String itemno;
  String itemname;

  Items({this.itemno, this.itemname});

  Items.fromJson(Map<String, dynamic> json) {
    itemno = json['itemno'];
    itemname = json['itemname'];
  }

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

Upvotes: 1

Muhtar
Muhtar

Reputation: 1710

As i mentioned it is a list. Deal with list like;

 List<ListItemList> result;
     var a = jsonDecode(response.body);
    
    
    // I can not compile this part you can check syntax
    a.forEach((element)
    at= ListItemList.fromJson(element);
    result.add(at);
    );
     

Upvotes: 0

Tirth Patel
Tirth Patel

Reputation: 5746

Use map to iterate over the JSON which is a list.

final List<ListItemList> result = (jsonDecode(response.body) as List)
    .map((e) => ListItemList.fromJson(e))
    .toList();

Upvotes: 1

Related Questions