【问题标题】:parse json in flutter with map type使用地图类型解析 json
【发布时间】:2019-11-13 06:34:36
【问题描述】:

我不明白如何将 json 解析为 list 或 Flutter 中的任何类型

https://jsonplaceholder.typicode.com/photos

并且该信息被 [], {}

包围
final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
  List<Photo> simple =
      parsed.map<Photo>((json) => Photo.fromJson(json)).toList();

我希望 json.decode.cast() 工作时,解析包含每个对象,但 当我打印解析时,它只是一个像 [~~~] 的数组 为什么他们在 Map 中使用 cast 方法?

【问题讨论】:

    标签: json flutter


    【解决方案1】:

    jsonDecode 已经为您提供了列表对象,因此您可以优化代码。

    在你的情况下,而不是使用

    final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
      List<Photo> simple =
          parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
    

    尝试使用

    final List<Photo> simple = jsonDecode(responseBody).map((item) => Photo(title: item.title)).toList()
    

    你避免使用 fromJson 函数

    【讨论】:

    • 我能再问你一个吗?解码 responseBody 为什么需要 [.map((item) => Photo(title: item.title))] ?我以为只是[ .toList() ]只需要
    • jsonDecode 和 json.decode 不会像 javascript 那样给你一个对象,在这种特殊情况下,它返回一个 Map 列表,在你的原始代码中你将每个对象映射到一个从该 json 创建的照片对象。就我而言,我也将每个“项目”映射到一个照片对象,不同之处在于,我不调用“fromJson”函数,而是调用构造函数,然后返回一个“照片”列表。
    【解决方案2】:

    您不需要转换数组,因为它们已经是对象列表。

    您可以使用以下方法获取照片对象列表:

    Future<String> getPhotos() async {
      var response = await http.get(
          'https://jsonplaceholder.typicode.com/photos');
      if (response.statusCode == 200) {
        var parsed = json.decode(response.body);
          List<Photo> simple = parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
          print(simple);
      }
    }
    

    这是使用的照片类。

    class Photo {
      final int albumId;
      final int id;
      final String title;
      final String url;
      final String thumbnailUrl;
    
      Photo(
          {this.albumId, this.id, this.title, this.url, this.thumbnailUrl});
    
      factory Photo.fromJson(Map<dynamic, dynamic> json) {
        return Photo(albumId: json['albumId'],
          id: json['id'],
          title: json['title'],
          url: json['url'],
          thumbnailUrl: json['thumbnailUrl'],
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多