我试图使用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>>();
但得到同样的错误。
{
"Product_One": {
"Owner": "test",
"Description": "test description",
"Theme_Objective": "test objective",
"Technical_details": "test technical details",
"Problem": "test",
"Solution": "test"
}
}
答案 0 :(得分:2)
您的JSON不包含任何列表,它是所有地图。
当您尝试将Map
转换为List
时,由于地图不是列表,因此必须失败。
也许你想这样做:
final productList = (jsonDecode(payload) as Map).values.toList();
这会为您提供产品地图列表,但不包含您似乎无法使用的名称。