将JSON数据(多个项目)保存到地图中

时间:2019-05-06 19:04:57

标签: dart flutter

我有一个从服务器上获取的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>'

1 个答案:

答案 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的。