如何将嵌套JSON转为Flutter Movie模型类并完善子变量定义?
解决方案
根据你提供的JSON结构,需要为嵌套层级分别创建强类型模型类,替代原来的List<Map<String,dynamic>>类型,这样能保证类型安全,更便于后续数据处理。
1. 定义最内层的Availables类
对应JSON里的availables对象:
class Availables { bool first; bool second; bool third; Availables({ required this.first, required this.second, required this.third, }); // 从JSON解析的构造函数 factory Availables.fromJson(Map<String, dynamic> json) { return Availables( first: json['first'] ?? false, second: json['second'] ?? false, third: json['third'] ?? false, ); } }
2. 定义Trailer类
对应JSON里trailers数组的元素:
class Trailer { String? title; String? option1; String? option2; String? option3; Availables? availables; Trailer({ this.title, this.option1, this.option2, this.option3, this.availables, }); factory Trailer.fromJson(Map<String, dynamic> json) { return Trailer( title: json['title'], option1: json['option1'], option2: json['option2'], option3: json['option3'], availables: json['availables'] != null ? Availables.fromJson(json['availables']) : null, ); } }
3. 定义Video类
对应JSON里videos数组的元素:
class Video { List<Trailer>? trailers; Video({this.trailers}); factory Video.fromJson(Map<String, dynamic> json) { var trailersList = json['trailers'] as List?; List<Trailer>? trailers; if (trailersList != null) { trailers = trailersList.map((trailerJson) => Trailer.fromJson(trailerJson)).toList(); } return Video(trailers: trailers); } }
4. 修改Movie类
替换原有的videos类型,并添加JSON解析构造函数:
import 'package:flutter/foundation.dart'; class Movie with ChangeNotifier { String id; String? title; String? description; String? image; List<Video>? videos; Movie({ required this.id, this.title, this.description, this.image, this.videos, }); factory Movie.fromJson(Map<String, dynamic> json) { var videosList = json['videos'] as List?; List<Video>? videos; if (videosList != null) { videos = videosList.map((videoJson) => Video.fromJson(videoJson)).toList(); } return Movie( id: json['id'] ?? '', title: json['title'], description: json['description'], image: json['image'], videos: videos, ); } }
补充说明
你提供的编辑后JSON存在语法问题(数组内不应出现"video": {...}或"trailers": {...}这类键值对,数组元素应直接为对象),上述代码基于修正后的合理结构编写。如果实际返回的JSON确实是特殊结构,需要调整解析逻辑(比如从数组元素中取出video或trailers键对应的值)。
内容的提问来源于stack exchange,提问作者best_of_man
相关产品推荐
相关产品推荐

