【问题标题】:How to parse List of maps Json in flutter?如何在颤动中解析地图Json列表?
【发布时间】:2019-11-08 06:59:25
【问题描述】:

我有一个带有三个映射的Json结构,一个是产品列表,然后是总计和税收。我必须在颤振中解析这个 json 结构。我在模型类上创建。现在我在类型转换中遇到错误。

如何解决?

JSON 结构:

{
  "products" : [
     {                  
       "cart_id": "7",      
     },          
     {                  
       "cart_id": "7",
     }     
  ],
  "total": 100,
  "tax": 100
}

模型类:

class CartModel {   
    List<Product> produtcts;
    double total;

    CartModel({this.produtcts, this.total});

    factory CartModel.fromJson(Map<String, dynamic> json) {
        var list = json['products'] as List;
        print(list.runtimeType);
        List<Product> products = list.map((i) => 
           Product.fromJson(i)).toList();

        return CartModel(
            produtcts: products, total: json['total'],);
    }
}

class Product {
    String cartId;

    Product({this.cartId,});

    factory Product.fromJson(Map<String, dynamic> json) {
        return Product(     
            productId: json['cart_id'],
        );
    }
}

【问题讨论】:

  • 你在哪里出错,Product.fromJsonCartModel.fromJson
  • 错误出现在 cartmodel 中:类型 '_InternalLinkedHashMap' 不是类型转换中类型 'List' 的子类型

标签: json flutter


【解决方案1】:

不要将产品数组转换为列表,而是尝试将其用作Iterable

对我来说,以下代码有效(注意 json.decode(String) 方法是从 dart:convert 包中导入的):

var data = '{"products":[{"cart_id": "7"},{ "cart_id": "7"}], "total": 100, "tax": 100}';
var decoded = json.decode(data);   
var cartModel = CartModel.fromJson(decoded);

class CartModel {   
    List<Product> produtcts;
    int total;

    CartModel({this.produtcts, this.total});

    factory CartModel.fromJson(Map<String, dynamic> json) {
        Iterable list = json['products'];
        print(list.runtimeType);
        List<Product> products = list.map((i) => 
           Product.fromJson(i)).toList();

        return CartModel(
            produtcts: products, total: json['total'],);
    }
}

class Product {
    String productId;

    Product({this.productId,});

    factory Product.fromJson(Map<String, dynamic> json) {
        return Product(     
            productId: json['cart_id'],
        );
    }
}

【讨论】:

  • 同样的错误,_InternalLinkedHashMap' 不是类型转换中'List' 类型的子类型。
  • @proversion 我已经用我如何调用CartModel.fromJson 方法的示例更新了我的答案。此代码运行良好,请注意我必须更正原始问题中的一些语法错误(我也在原始问题中修复了这些错误)。
  • 最终数据 = jsonDecode(response.body);最后的休息=数据作为列表; list = rest.map((json) => CartModel.fromJson(json)).toList();
  • 您是否检查了从后端系统收到的结果(实际的 JSON)?它是否包含数组的值?我已经尝试在上面的代码中使用jsonDecode() 并且工作得很好。在我看来,您尝试解析的 json 与您的预期略有不同,因此导致错误。
  • 地图(3 项) - 0 -> 产品, 1->total , 2 -> tax
【解决方案2】:

很简单:

 List<CartModel> list = new List();
  var jsonlist = jsonDecode(yourJsonString) as List;
  jsonlist.forEach((e) {
    list.add(CartModel.fromJson(e));
  });

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2020-10-28
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多