微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Dart中解析具有嵌套对象数组的JSON?

我正在制作一个Flutter应用程序,我正在使用The MovieDB api来获取数据.当我打电话给api并要求一部特定的电影时,这是我得到的一般格式:
{
   "adult": false,"backdrop_path": "/wrqUiMXttHE4UBFMhLHlN601MZh.jpg","belongs_to_collection": null,"budget": 120000000,"genres": [
        {
            "id": 28,"name": "Action"
        },{
            "id": 12,"name": "Adventure"
        },{
            "id": 878,"name": "Science Fiction"
        }
    ],"homepage": "http://www.rampagethemovie.com","id": 427641,"imdb_id": "tt2231461","original_language": "en","original_title": "Rampage",...
}

我已经设置了一个模型类来解析它,并且类定义如下:

import 'dart:async';

class MovieDetail {
  final String title;
  final double rating;
  final String posterartUrl;
  final backgroundArtUrl;
  final List<Genre> genres;
  final String overview;
  final String tagline;
  final int id;

  const MovieDetail(
      {this.title,this.rating,this.posterartUrl,this.backgroundArtUrl,this.genres,this.overview,this.tagline,this.id});

  MovieDetail.fromJson(Map jsonMap)
      : title = jsonMap['title'],rating = jsonMap['Vote_average'].todouble(),posterartUrl = "http://image.tmdb.org/t/p/w342" + jsonMap['backdrop_path'],backgroundArtUrl = "http://image.tmdb.org/t/p/w500" + jsonMap['poster_path'],genres = (jsonMap['genres']).map((i) => Genre.fromJson(i)).toList(),overview = jsonMap['overview'],tagline = jsonMap['tagline'],id = jsonMap['id'];
}
class Genre {
  final int id;
  final String genre;

  const Genre(this.id,this.genre);

  Genre.fromJson(Map jsonMap)
    : id = jsonMap['id'],genre = jsonMap['name'];
}

我的问题是我无法从JSON中正确解析该类型.当我获得JSON并将其传递给我的模型类时,我收到以下错误

I/Flutter (10874): type 'List<dynamic>' is not a subtype of type 'List<Genre>' where
I/Flutter (10874):   List is from dart:core
I/Flutter (10874):   List is from dart:core
I/Flutter (10874):   Genre is from package:Flutter_app_first/models/movieDetail.dart

我认为这会有效,因为我为Genre对象创建一个不同的类,并将JSON数组作为列表传递.我不明白List< dynamic>不是List< Genre>的孩子因为关键字动态不是暗示任何对象吗?有谁知道如何将嵌套的JSON数组解析为自定义对象?

解决方法

尝试genres =(jsonMap [‘genres’]作为List).map((i)=> Genre.fromJson(i)).toList()

问题:调用没有强制转换的map会使它成为动态调用,这意味着Genre.fromJson的返回类型也是动态的(不是流派).

看一下https://flutter.io/json/的一些提示.

https://pub.dartlang.org/packages/json_serializable这样的解决方案使这更容易

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐