Json 解码转换为列表<dyamic>而不是 Map<String,动态>



我从API得到了这个响应:

[
{
"id": 1,
"company_id": 2,
"surname": "Surname",
"name": "Name",
"employee_position_id": 1,
"phone_number": "+xxx xxx xxx xxx",
"email": "mail@mail.mail",
"user_id": 1,
"contact_level": null,
"created_at": "2020-10-03T16:50:59.000000Z",
"updated_at": "2020-10-03T17:05:54.000000Z",
"deleted_at": null,
"full_name": "Surname Name",
"position_name": "IT",
"company_name": "Company One"
}
]

根据我找到的每一个教程,这个代码应该可以工作:

void _getContacts() async {
var res = await Network().getData('/contacts');
final Map<String, dynamic> body = json.decode(res.body);
// print(body.runtimeType);
}

然而,它给了我这个错误:

E/flutter (23716): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'

当我打印body.runtimeType时,它显示List<dynamic>

我反复检查了所有内容,json似乎格式正确,所有代码似乎都写得正确。

它怎么可能给我List而不是Map?以及如何强制json.decode给我一个Map而不是List?

有一个List,您必须对它进行迭代。如果你的列表中只有一个对象,那么你可以像这个一样使用它

void _getContacts() async {
var res = await Network().getData('/contacts');
var response= json.decode(res.body);
final Map<String, dynamic> body = response[0];
// print(body.runtimeType);
}

如果你的列表上有不止一个对象,那么你可以像这个一样使用它

void _getContacts() async {
var res = await Network().getData('/contacts');
var response= json.decode(res.body);
final Map<String, dynamic> body = response.map((e)=>e);
// print(body.runtimeType);
}

最新更新