飞镖2和解析json

时间:2018-05-20 02:18:43

标签: dart angular-dart

我试图使用Dart 2 for web将json解析为产品列表。

我有以下课程:

class Product {

  final String Problem;

  final String Owner;

  final String Description;

  const Product({
    this.Problem, 
    this.Owner,
    this.Description,
  });


  factory Product.parse(Map<String, dynamic> json) {
    print(json);
    return new Product(
      Problem: json["Problem"],
      Owner: json["Owner"],
      Description: json["Description"]
    );
  }
}

我试图用以下方法解析它:

Stream<Product> getProducts() async* {
    final payload = await HttpRequest.getString("products.json");
    print(payload);
    //var _json = (json.decode(payload));
    print("break");
    var list = json.decode(payload);
    print(list);
    //print(list);
    final productList = (json.decode(payload) as List).cast<Map<String, dynamic>>();

  }

然而,此错误导致此错误:

  

例外:输入&#39; _JsonMap&#39;不是预期类型的​​子类型   &#39;列表&#39;

我可以看到我在调试时有list[Symbol(_original)],但是当我尝试对此进行评估时,我将返回未定义。

我也试过

  • List list = json.decode(payload) as List;
  • List<dynamic> list = json.decode(payload);
  • List<dynamic> list = json.decode(payload) as List<dynamic>;
  • var list = (json.decode(payload)).cast<Map<String, dynamic>>();
  • var list = (json.decode(payload)).cast<Map<dynamic, dynamic>>();

但得到同样的错误。

的Json

{
    "Product_One": {
        "Owner": "test",
        "Description": "test description",
        "Theme_Objective": "test objective",
        "Technical_details": "test technical details",
        "Problem": "test",
        "Solution": "test"
    }
}

1 个答案:

答案 0 :(得分:2)

您的JSON不包含任何列表,它是所有地图。 当您尝试将Map转换为List时,由于地图不是列表,因此必须失败。

也许你想这样做:

final productList = (jsonDecode(payload) as Map).values.toList();

这会为您提供产品地图列表,但不包含您似乎无法使用的名称。