Flutter解析JSON数组时如何区分重名title键并分别赋值给变量
解决方案
你遇到的同名title并非JSON顶层的重复键,而是存在于results数组的不同元素中,只要按数组下标取值即可区分,具体实现步骤如下:
1. 补全实体类结构
你需要保证MostPopular和对应的子实体类结构和JSON结构匹配,示例代码如下:
// 父实体类 MostPopular class MostPopular { int page; List<Movie> results; MostPopular({required this.page, required this.results}); factory MostPopular.fromJson(Map<String, dynamic> json) { var resultsList = json['results'] as List; List<Movie> movies = resultsList.map((item) => Movie.fromJson(item)).toList(); return MostPopular( page: json['page'], results: movies, ); } } // 子实体类 Movie,对应results数组里的单个电影对象 class Movie { bool adult; String backdropPath; List<int> genreIds; int id; double popularity; String posterPath; String releaseDate; String title; Movie({ required this.adult, required this.backdropPath, required this.genreIds, required this.id, required this.popularity, required this.posterPath, required this.releaseDate, required this.title, }); factory Movie.fromJson(Map<String, dynamic> json) { var genreList = json['genre_ids'] as List; List<int> ids = genreList.cast<int>(); return Movie( adult: json['adult'], backdropPath: json['backdrop_path'], genreIds: ids, id: json['id'], popularity: json['popularity'], posterPath: json['poster_path'], releaseDate: json['release_date'], title: json['title'], ); } }
2. 分别取出两个title赋值
调用obtenerInfo拿到MostPopular对象后,直接通过数组下标定位对应电影元素,再取title即可:
// 调用示例 void getTitles() async { MostPopular data = await obtenerInfo(); // 第一个电影的title赋值给title1 String title1 = data.results[0].title; // 第二个电影的title赋值给title2 String title2 = data.results[1].title; // 后续可直接使用title1、title2变量 }
注意事项
- 取值前可以先判断
results数组的长度,避免数组元素不足导致下标越界报错 - 如果是批量处理多个电影的title,直接遍历
results数组即可
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

