我有一个从服务器上获取的json文件,我想使用模型将数据保存到地图中,正确的方法是什么?
我创建了一个模型来解码json数据。如果我使用另一个不带[[]]的json文件(单个项目),则我的json文件具有一些“ []”,它可以工作,但不能用括号括起来。
这是我的模特
class RestoModel {
// int id;
String name;
RestoModel(this.name);
RestoModel.fromJson(Map<String, dynamic> data) {
name = data['name'];
}
}
我的提取功能
List<RestoModel> restaurantList = [];
void fetchRestaurants() async {
var response = await get('https://link/get_list.php');
var data = RestoModel.fromJson(json.decode(response.body));
setState(() {
restaurantList.add(data);
print(response.body);
});
}
我收到此错误
Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
这是我的json数据
[{"id":"1","name":"Resto 1"},{"id":"3","name":"Resto 2\r\n"}]
但是我的代码可以处理此json数据
{
"name": "beatae et provident et ut vel",
}
我希望将json文件保存在列表中,但出现此错误
Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
答案 0 :(得分:1)
{"id":"1","name":"Resto 1"}
是地图,[{"id":"1","name":"Resto 1"},{"id":"3","name":"Resto 2\r\n"}]
是地图列表。因此,基本上,当您解码json时,最终得到了模型列表,id:1和id:2。您正在尝试将动力学列表提供给命名构造函数,该构造函数将单个Map作为参数而不是它们的列表。
尝试一下:
Iterable i = json.decode(response.body);
List<RestoModel> restaurantList = i.map((model) => RestoModel.fromJson(model)).toList();
在这段代码中,我有一个可迭代的对象,对于每个可迭代的餐厅数据,我都是从json创建restomodel的。