You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:35:24