未处理的异常:类型 'String' 不是 dart 中错误'index'类型 'int' 的子类型



我试图解码一个json文件,在我的请求后从服务器回来,但是当我想解码json时,它显示一个错误以下是我的解码代码:

var loginJson = jsonDecode(utf8.decode(response.bodyBytes));
var model = idResponseModel(
loginJson['id'],
loginJson["fname"],
loginJson["lname"],
loginJson["nationalCode"],
loginJson["gender"],
loginJson["bornDate"],
loginJson["phoneNumber"],
loginJson["cardNumber"],
loginJson["enabled"]);
print(model.id);

和控制台显示发生在loginJson['id']

idFrom server是这样的:

"id": "5de0a41e-9a6f-4b55-9567-024cd0fdbfc5"

对直接使用[bodyBytes]有点惊讶试试使用Response getter→body

String get body => _encodingForHeaders(headers).decode(bodyBytes);

在你的例子中应该是这样的:

var loginJson = jsonDecode(response.body);
var model = idResponseModel(
loginJson['id'],
loginJson["fname"],
loginJson["lname"],
loginJson["nationalCode"],
loginJson["gender"],
loginJson["bornDate"],
loginJson["phoneNumber"],
loginJson["cardNumber"],
loginJson["enabled"]);
print(model.id);

我现在没有办法检查,但如果它工作,请告诉我

这个错误意味着loginJson.[]期望一个int,而不是一个String。因此,loginJson实际上可能是一个List,而不是像您期望的那样是Map。您可以通过打印loginJson.runtimeType来检查。

除非您发布整个JSON,否则这个问题是不充分的,并且不可复制…因为在尝试从错误的一个节点获取数据时(id是一个字符串索引,但它遇到了一个意外的数字索引),您可能认为已经有了响应。这就是为什么你的样本数据和错误信息在一起没有提供任何意义。

相关内容

最新更新