Flutter中自定义类解析JSON时出现类型不匹配错误的解决咨询
解决Dart JSON解析中类型不匹配的问题
这个错误的核心原因很清晰:你直接把JSON里的value字段(本质是Map类型)赋值给了Value类型的变量,没有通过Value.fromJson工厂方法完成类型转换。另外你的数据集里存在value为空对象的情况,也需要做兼容处理避免崩溃。
分步修复方案
1. 调整Value类,兼容空值/缺失字段
考虑到数据集中可能存在空的value对象,我们需要让Value的构造器和fromJson方法支持空输入:
class Value { final String? apple; // 改为可空类型,或根据业务需求设置默认值 final String? pear; // 去掉required,允许创建空实例 Value({this.apple, this.pear}); factory Value.fromJson(Map<dynamic, dynamic>? json) { // 处理json为null的情况 if (json == null) { return Value(); } return Value( apple: json['apple'] as String?, pear: json['pear'] as String?, ); } }
如果你的业务要求apple和pear必须非空,可以给字段设置默认值:
apple: json['apple'] as String? ?? '默认内容', pear: json['pear'] as String? ?? '默认内容',
2. 修复Item类的fromJson方法
关键是调用Value.fromJson将JSON对象转换为Value实例,同时确保photos的类型转换正确:
class Item { final String title; final List<String> photos; final Value value; Item({required this.title, required this.photos, required this.value}); factory Item.fromJson(Map<dynamic, dynamic> json) { return Item( title: json['title'] as String, // 将JSON数组显式转换为List<String> photos: List<String>.from(json['photos']), // 调用Value.fromJson完成类型转换 value: Value.fromJson(json['value'] as Map<dynamic, dynamic>?), ); } }
关键知识点说明
- 类型转换核心:JSON中的嵌套对象(
value字段)本质是Map,必须通过对应类的fromJson方法转换成自定义类实例,不能直接赋值。 - 空值兼容:数据集里存在空
value对象时,必须让fromJson方法支持处理null或空Map,否则会触发空指针异常。 - List类型安全:JSON数组需要显式转换为
List<String>,避免隐式类型转换带来的类型不匹配错误。
内容的提问来源于stack exchange,提问作者marielle
相关产品推荐
相关产品推荐

