我正在使用dart包json_serializable进行json序列化。查看flutter文档,它显示了如何反序列化单个对象,如下所示:
Future<Post> fetchPost() async { final response = await http.get('https://jsonplaceholder.typicode.com/posts/1'); if (response.statusCode == 200) { // If the call to the server was successful, parse the JSON return Post.fromJson(json.decode(response.body)); } else { // If that call was not successful, throw an error. throw Exception('Failed to load post'); } }
但是,我对dart不够熟悉,无法弄清楚如何对项目列表而不是单个实例执行相同的操作。
好吧,您的服务将处理作为地图的响应正文,或相应地处理地图列表。根据您所拥有的代码,您要核算1件商品。
如果响应主体是可迭代的,那么,如果我正确理解了您的问题,那么您需要进行解析并进行相应处理。
例:
Iterable l = json.decode(response.body); List<Post> posts = List<Post>.from(l).map((Map model)=> Post.fromJson(model)).toList();
其中posts是帖子列表。
编辑 :我想在这里添加清晰的注释。目的是解码返回的响应。下一步是将json对象的可迭代性转换为对象的实例。这是通过在您的类中创建fromJson方法来正确获取json并相应地实现它来完成的。下面是一个示例实现。
class Post { // Other functions and properties relevant to the class // ...... /// Json is a Map<dynamic,dynamic> if i recall correctly. static fromJson(json): Post { Post p = new Post() p.name = ... return p } }
这些天,我对Dart有点抽象,希望有一个更好的实用程序来完成需要完成的任务。所以我的语法可能还差一点,但这是伪代码。
编辑 在过去的某个时候,此功能的API有所更改。我不再使用Dart编程,因此很难测试其中的一些更新。话虽这么说,但在此较新版本的dart中似乎存在投放问题,并且我更新了以上答案。它接受可迭代对象并将其转换为发布列表,然后在该列表上进行映射。