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

Flutter中Dart JSON解码遇类型不匹配错误,求解决方案

解决Dart JSON解码类型不匹配错误

错误原因

你遇到的错误是因为jsonDecode返回的列表元素类型为dynamic,但你在map回调里直接指定参数为Map,导致Dart无法完成类型匹配,触发类型转换异常。另外你的RicettaNew类未正确解析嵌套的values字段,代码还存在重复调用jsonDecode的冗余操作。

解决步骤

1. 完善数据模型类

首先定义Values类来解析JSON中的嵌套数组,同时修正RicettaNew的fromJson方法,完成values字段的解析:

class Values {
  String key;
  String value;

  Values(this.key, this.value);

  Values.fromJson(Map<dynamic, dynamic> json) {
    key = json["key"];
    value = json["value"];
  }
}

class RicettaNew {
  String name;
  List<Values> values = [];

  RicettaNew(this.name, this.values);

  RicettaNew.fromJson(Map<dynamic, dynamic> json) {
    name = json["name"];
    // 解析values列表
    if (json["values"] != null) {
      values = (json["values"] as List)
          .map((item) => Values.fromJson(item as Map<dynamic, dynamic>))
          .toList();
    }
  }
}

2. 修正JSON解码代码

去掉重复的jsonDecode调用,调整map回调的参数类型,先接收dynamic再转为Map:

var serverlink = "http://207.154.221.255:8600/api/recipes" + "/" + mc.model;
var request = http.Request('GET', Uri.parse(serverlink));
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  var result = await response.stream.bytesToString();
  print("result: " + result);
  // 解析为List并处理类型转换
  var jsonList = jsonDecode(result) as List;
  lista = jsonList.map((dynamic item) {
    return RicettaNew.fromJson(item as Map<dynamic, dynamic>);
  }).toList();
}

也可以用更简洁的写法:

lista = (jsonDecode(result) as List)
    .map((item) => RicettaNew.fromJson(item as Map<dynamic, dynamic>))
    .toList();

这样即可解决类型不匹配的错误,同时完整解析JSON中的所有字段。

内容的提问来源于stack exchange,提问作者riki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:16:10