Flutter:如何正确读取JSON字段?提取insertId类型不匹配报错如何解决
问题原因
触发报错的核心原因是int.parse()方法仅接收String类型的入参,但你调用接口返回的JSON数据中,insertId字段本身就是数字类型,经过jsonDecode解析后会被Dart自动识别为int类型,直接把int类型的值传入int.parse()就会触发int类型不是String类型的子类型的类型不匹配异常。
修复方案
根据后端返回的实际情况选择对应方案即可:
方案1:通用兼容写法(推荐,可兼容返回int/String两种场景)
不需要做强制字符串转换,先判断类型再处理,修改对应代码行:
// 原错误代码 // responsetag = int.parse(data["insertId"]); // 替换为 responsetag = data["insertId"] is int ? data["insertId"] as int : int.parse(data["insertId"].toString());
方案2:确定后端永远返回int类型时使用
如果可以100%确认insertId返回值永远是数字类型,直接赋值即可:
responsetag = data["insertId"] as int;
额外代码优化建议
你的代码中同时使用了await和then嵌套,属于不必要的异步写法,可简化为更易读的写法,避免异步逻辑出错:
Future<int> saveUser(User user, String authToken) async { print(convert.json.encode(user.toJson())); int responsetag = 0; try { // 去掉then嵌套,直接用await接收返回值 http.Response response = await http.post( Uri.parse(_navLinks.saveUser()), body: convert.json.encode(user.toJson()), headers: { "Accept": "application/json", "content-type": "application/json", HttpHeaders.authorizationHeader: "Bearer $authToken" }, ); final int statusCode = response.statusCode; print("RESPONSE: " + response.body); print("STATUS CODE: " + statusCode.toString()); if (statusCode < 200 || statusCode > 400) { throw Exception("Error while fetching data"); } else { Map<String, dynamic> data = convert.jsonDecode(response.body); // 使用修复后的赋值逻辑 responsetag = data["insertId"] is int ? data["insertId"] as int : int.parse(data["insertId"].toString()); } return responsetag; } catch (error) { rethrow; } }
内容的提问来源于stack exchange,提问作者PeakGen
相关产品推荐
相关产品推荐

