首页 > 解决方案 > 如何解析json动态数组名

问题描述

需要解析这个具有动态数组 key 的 json。尝试使用每个键值语句,但仍然无法正常工作。

{ 
"68": [
         {
            "id": 173,
            "user_id": 21
        },
        {
            "id": 174,
            "user_id": 21
        }
    ],
    "70": [
        {
            "id": 175,
            "user_id": 21
        },
        {
            "id": 176,
            "user_id": 21
        }
    ]
}

到目前为止,我试图像这样解析,但它不工作它给了我一个错误''未处理的异常:类型'List<dynamic>'不是类型的子类型'Map<String, dynamic>'''

class MyOrdersModel {

  final List<MyOrders> myorders;

  MyOrdersModel({
    this.myorders,
  });

factory MyOrdersModel.fromJson(Map<String, dynamic> parsedJson) {

    var list = new List();
    parsedJson.forEach((key, value){
      list.add(value);
      //print("array_key" + key);

    });

    print(list); 

    List<MyOrders> myorders = new List<MyOrders>();
    myorders = list.map((i) => MyOrders.fromJson(i)).toList();

    return new MyOrdersModel(myorders: myorders);
  }
}

标签: arraysjsonflutterdart

解决方案


您的json数据:

1: { 
2:   "68": [
3:     {"id": 173,"user_id": 21},
4:     {"id": 174,"user_id": 21}],
5:   "70": [
6:     {"id": 175, "user_id": 21},
7:     {"id": 176, "user_id": 21}]}

你的代码:

factory MyOrdersModel.fromJson(Map<String, dynamic> parsedJson) {
    var list = new List();
    // parsedJson = {"68": [{"id": 173,"user_id": 21}, {"id": 174,"user_id": 21}], "70": [{"id": 175, "user_id": 21}, {"id": 176, "user_id": 21}]}
    parsedJson.forEach((key, value){
      // First time: value = [{"id": 173,"user_id": 21}, {"id": 174,"user_id": 21}]
      // Second time: value = [{"id": 175, "user_id": 21}, {"id": 176, "user_id": 21}]
      list.add(value);
      //print("array_key" + key);
    });
    print(list); 
    List<MyOrders> myorders = new List<MyOrders>();
    // First time: i = [{"id": 173,"user_id": 21}, {"id": 174,"user_id": 21}]
    // ★ => That's list => `Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'`
    myorders = list.map((i) => MyOrders.fromJson(i)).toList();
    return new MyOrdersModel(myorders: myorders);
  }
}

解决方案:

class MyOrdersModel {

  final List<MyOrders> myorders;

  MyOrdersModel({this.myorders});}

  factory MyOrdersModel.fromJson(Map<String, dynamic> parsedJson) {
    var list = new List();
    parsedJson.forEach((key, value){
      value.forEach((value) {
        list.add(value);
      });
    });

    print(list); 

    List<MyOrders> myorders = new List<MyOrders>();
    myorders = list.map((i) => MyOrders.fromJson(i)).toList();

    return new MyOrdersModel(myorders: myorders);
  }
}

推荐阅读