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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:06:03