Flutter从API获取JSON数据解析时报类型不匹配错误如何解决?
问题原因
Sample类中result字段被定义为String类型,但接口返回的result字段是包含对象的List<dynamic>类型,类型不匹配触发类型转换报错- 实体类中取状态码使用的
json["code"]和接口返回的状态码字段名status_code不对应,会读取到空值
修复代码
第一步:定义嵌套层级的实体类
// 对应result数组内的单个对象结构 class ResultItem { final String nik; final String name; ResultItem({required this.nik, required this.name}); factory ResultItem.fromJson(Map<String, dynamic> json) { return ResultItem( nik: json["nik"], name: json["name"], ); } } // 改造原Sample实体类 class Sample { // 将result修改为List类型存储子对象 final List<ResultItem> result; // 字段名对应接口返回的status_code final int statusCode; Sample({required this.result, required this.statusCode}); factory Sample.fromJson(Map<String, dynamic> json) { // 转换result数组为List<ResultItem>类型 List<dynamic> rawResult = json["result"] as List; List<ResultItem> parsedResult = rawResult.map((item) => ResultItem.fromJson(item)).toList(); return Sample( result: parsedResult, statusCode: json["status_code"], ); } }
第二步:业务调用代码(原有逻辑无需大幅修改)
final jsonData = json.decode(response.body); Sample sample = Sample.fromJson(jsonData); setState(() { // 打印完整result数组 print(sample.result); // 读取数组内单个字段的示例 if (sample.result.isNotEmpty) { print(sample.result.first.nik); // 输出 1234 print(sample.result.first.name); // 输出 test } print(sample.statusCode); // 输出 200 });
内容的提问来源于stack exchange,提问作者Eggy
相关产品推荐
相关产品推荐

