【问题标题】:How can i deserialize my json in Flutter/dart如何在 Flutter/dart 中反序列化我的 json
【发布时间】:2021-09-05 01:18:41
【问题描述】:

我对颤动很陌生,现在我被困在将 json 字符串消毒到我的班级中。 感谢您在这方面的帮助。

这是我的json

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

还有我的 JSON 类

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"],       
      );
}

我怎么称呼

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

【问题讨论】:

  • 我总是收到错误“列表字符串不是动态列表的子类型”
  • 兄弟,你没有得到 json,你得到了列表。如果你想构建你的对象更改 Map 以列出并使用 json[index]["itemno"]

标签: json flutter json-deserialization


【解决方案1】:

检查此链接“https://app.quicktype.io/”

然后将您的 json 代码粘贴到左侧并添加类模型名称。

例如。

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

//在服务中添加以下代码

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

// 在特定页面调用服务

列出_users;

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

【讨论】:

    【解决方案2】:

    使用map 遍历作为列表的 JSON。

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

    【讨论】:

      【解决方案3】:

      转到URL 并粘贴您的 JSON。它会将其转换为 fromJson(json 到 dart 对象的转换)和 toJson(dart 对象到 json 的转换)函数。

      根据您提供的 Json,这里是 fromJson 和 toJosn 的示例

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

      【讨论】:

        【解决方案4】:

        正如我提到的,它是一个列表。处理类似的列表;

         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);
            );
             
        

        【讨论】:

          猜你喜欢
          • 2020-01-02
          • 2020-08-24
          • 2020-08-25
          • 2021-08-31
          • 2017-11-19
          • 1970-01-01
          • 2020-09-25
          • 2020-04-30
          • 1970-01-01
          相关资源
          最近更新 更多