如何在颤振中解析地图 Json 列表?

pro*_*ion 2 json flutter

在此处输入图片说明在此处输入图片说明在此处输入图片说明我有一个带有三张地图的 Json 结构,一个是产品列表,然后是总计和税收。我必须在颤振中解析这个 json 结构。我在模型类上创建。现在我在类型转换中遇到错误。

如何解决这个问题?

JSON 结构:

{
  "products" : [
     {                  
       "cart_id": "7",      
     },          
     {                  
       "cart_id": "7",
     }     
  ],
  "total": 100,
  "tax": 100
}
Run Code Online (Sandbox Code Playgroud)

模型类:

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'],
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

Mau*_*kom 5

不要将 products 数组转换为列表,而是尝试将其用作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'],
        );
    }
}
Run Code Online (Sandbox Code Playgroud)