如何发生?我认为这是在我进行json映射时发生的。它表示异常:类型'int'不是类型'String'的子类型。我尝试使用本地json资产文件,但没有什么不同。请帮助我解决这个问题。
class Product {
int productId;
String productName;
String productPrice;
Product({this.productId, this.productName, this.productPrice});
Product.fromProduct(Product p) {
this.productId = p.productId;
this.productName = p.productName;
this.productPrice = p.productPrice;
}
factory Product.fromJson(Map<String, dynamic> parsedJson) {
return Product(
productId: parsedJson['ID'],
productName: parsedJson['Name'],
productPrice: parsedJson['SellPrice']);
}
}
Future<String> _loadAProductAsset() async {
var res = await http.get(Uri.encodeFull("http://10.0.2.2:9155/product"));
return json.encode(json.decode(res.body)["data"]);
}
List<Product> parseProduct(String myJson) {
final parsed = json.decode(myJson).cast<Map<String, dynamic>>();
return parsed.map<Product>((json) => Product.fromJson(json)).toList();
}
Future<List<Product>> fetchProduct() async {
await wait(1);
String jsonString = await _loadAProductAsset();
return compute(parseProduct, jsonString);
}
Future wait(int s) {
return new Future.delayed(Duration(seconds: s), () => {});
}
这是_loadAProductAsset()函数中的json
[
{
"ID": 2,
"CreatedAt": "2020-01-06T03:56:32+07:00",
"UpdatedAt": "2020-01-06T03:56:32+07:00",
"DeletedAt": null,
"Name": "Product A",
"Category": "0",
"Stock": "50",
"StockUnit": "0",
"BuyPrice": "20000",
"SellPrice": "21000",
"SupplierID": "1"
}
]
答案 0 :(得分:2)
解决方案1:无需将数据类型显式定义为字符串和整数,而是可以将它们定义为动态变量,如下所示:
dynamic productId;
dynamic productName;
dynamic productPrice;
这里发生的事情是,您有责任谨慎处理投射的任何数据类型。
解决方案2:通过转到浏览器窗口中的链接并查看传入的每组数据的数据类型,检查传入JSON的结构。查看productId的类型是什么。如果声明为“ 12”,则必须为字符串。
结束JSON项目的数据类型后,可以在反序列化JSON并在工厂构造函数中定义变量(在本例中为fromProduct)的同时解析数据。如下所示:
Product.fromProduct(Product p) {
this.productId = int.parse(p.productId); // takes in a String and converts it into an int.
this.productName = p.productName;
this.productPrice = p.productPrice;
}
答案 1 :(得分:1)
您需要将来自JSON的字符串解析为一个int:
Product.fromProduct(Product p) {
this.productId = int.parse(p.productId);
this.productName = p.productName;
this.productPrice = p.productPrice;
}
答案 2 :(得分:0)
由于某种原因,我遇到了这个问题,我早些时候已经做过json.decode(response)
,但是在做MyModel.fromJson(response)
之前我不得不再次做
所以我通常推荐的是
import 'dart:convert';
.
.
.
.
var decodedJson = json.decode(decode);
MyModel model = MyModel.fromJson(decodedJson);
以上对我有用。