json - 如何在 flutter 中反序列化来自json的对象列表

我正在使用 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 不够熟悉,无法弄清楚如何对项目列表而不是单个实例执行相同操作。

最佳答案

好吧,您的服务将处理作为 map 的响应正文或相应的 map 列表。根据您拥有的代码,您计入 1 项。

如果响应正文是可迭代的,那么如果我正确理解您的问题,您需要相应地解析和遍历。

例子:

Iterable l = json.decode(response.body);
List<Post> posts = List<Post>.from(l.map((model)=> Post.fromJson(model)));

帖子是帖子列表。

编辑:我想在这里添加一个清晰的说明。这里的目的是解码返回的响应。下一步是将 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 中抽象出来,支持更好的实用程序来完成需要完成的任务。所以我的语法可能有点偏差,但这是伪代码。

https://stackoverflow.com/questions/51053954/

相关文章:

Flutter - 如何更改 TextField 提示颜色?

firebase - flutter 和 Firebase : Compression before

dart - Flutter - 在路由之间推送和获取值(value)

dart - 有没有办法在 InitState 方法上加载异步数据?

firebase - Flutter 和 google_sign_in 插件 : PlatformE

dart - Flutter 图像预加载

dart - 如何在 ListView 内 flutter 中创建一行可滚动的文本框或小部件?

android - 如何在单击推送通知时打开特定屏幕以进行 flutter

flutter - 如何检查滚动位置是在 ListView 的顶部还是底部?

flutter - 如何为 flutter 添加自定义颜色?