使用Flutter Freezed如何将同层级JSON数据拆分至两个模型?
解决方案
要把扁平层级的JSON数据拆分到两个Freezed子模型中,你需要自定义UserInfoModel的fromJson方法,手动将扁平JSON拆分后分别传入子模型的解析方法——默认自动生成的fromJson会期望JSON包含defaultModel和etcModel嵌套字段,和你的扁平结构不匹配,所以必须手动实现。
修改后的UserInfoModel代码
@freezed class UserInfoModel with _$UserInfoModel { const factory UserInfoModel({ required DefaultModel defaultModel, required EtcModel etcModel, }) = _UserInfoModel; // 自定义fromJson,手动拆分扁平JSON factory UserInfoModel.fromJson(Map<String, dynamic> json) { return UserInfoModel( defaultModel: DefaultModel.fromJson({ 'name': json['name'], 'age': json['age'], 'gender': json['gender'], }), etcModel: EtcModel.fromJson({ 'hobby': json['hobby'], 'favoriteFood': json['favoriteFood'], }), ); } }
关键说明
- 直接从扁平
json对象中提取对应字段,构建子模型所需的Map后,调用各自的fromJson完成解析。 - 如果
Gender是枚举类型,确保已配置正确的JSON解析逻辑(比如用json_serializable的@JsonEnum注解),避免解析失败。 - 这种方式无需修改原有的
DefaultModel和EtcModel,仅在组合模型层处理数据拆分即可。
内容的提问来源于stack exchange,提问作者seokseok
相关产品推荐
相关产品推荐

