颤振 json 解码_TypeError(类型 'List<dynamic>' 不是类型"映射<动态、动态>'的子类型)



所以这个错误我明白它是什么,以及我需要做什么,但我不明白如何做我想做的事情。

所以我使用了一个html api服务器调用,它返回一个json编码的Map对象列表。

每个列表的大小可以(并且会(发生变化,所以我不能有一个只检查和解码前几个或其他东西的函数。 此外,每个 Map 对象可能包含不同的信息,所以我不能让它静态解析。 我需要 jsonDecode 整个列表,并将其转换回单独的 Map 对象列表,以便我可以在程序的其余部分使用 Map 对象中包含的信息。

出于隐私原因,我无法提供我收到的对象类型(或任何类似内容(的示例,对于给您带来的不便以及尝试回答问题的难度增加,我深表歉意。

也就是说,我知道我只需要有一个函数来检查列表中有多少对象,将 response.body 拆分为许多部分,将每个部分解码为 Map 对象,并将其添加到列表或数组中。

您可以提供的任何信息(即使不是特定代码(都会有所帮助,即使只是告诉我应该查看哪些命令。 (最好附上它们的语法示例,但当然不是强制性的(。

如果您需要我可以提供的任何信息,我很乐意这样做。提前谢谢你。

您的问题在于我们甚至不知道您传入数据的一般结构。作为一个社区,我们不需要知道一个实际的例子。即使是伪造的数据也足够了。

话虽如此,我将尝试为您提供一些示例,说明您的传入数据可能是什么,以及您如何执行您正在尝试做的事情。

传入的 JSON 对象

假设您的传入数据如下所示:

{
"data1": {
"subdata1":"subvalue1",
"subdata2":"subvalue2",
"subdata3":3,
"subdata4":{
"subsubdata1":"subvalue1"
}
},
"data2": {
"subdata1":"subvalue1",
"subdata2":"subvalue2",
"subdata3":3,
"subdata4":{
"subsubdata1":"subvalue1"
}
}
}

在这种情况下,您可以使用 jsonDecode,并且仍然能够计算键并返回关联的对象列表,如下所示:

void consumeResponse(http.Response response) {
// decode the entire response string
final Map<String, dynamic> rawObject = jsonDecode(response.body);
// count the records in the response
final int recordCount = rawObject.keys.length;
// create an array of the data in each top level object key (but you lose the top level key name)
final List<dynamic> records = List<dynamic>.from(rawObject.values);
}

传入的 JSON 对象数组

假设您的 json 实际上已经在 json 数组中,并且您的响应如下所示:

[
{
"data1": {
"subdata1":"subvalue1",
"subdata2":"subvalue2",
"subdata3":3,
"subdata4":{
"subsubdata1":"subvalue1"
}
}
},
{
"data2": {
"subdata1":"subvalue1",
"subdata2":"subvalue2",
"subdata3":3,
"subdata4":{
"subsubdata1":"subvalue1"
}
}
}
] 

然后你可以用这个函数完成同样的事情:

void consumeResponse(http.Response response) {
// decode the entire response string. this will auto-magically produce a List<dynamic>
final List<dynamic> records = jsonDecode(response.body);
// count the records in the response
final int recordCount = records.length;
}

包含数据子列表的传入 JSON 对象

在某些情况下,您可能会在包装 json 对象中嵌入结果列表,该对象还包含有关查询的一些其他元。在这种情况下,您的数据可能如下所示:

{
"meta": {
"limit": 2,
"offset": 1,
"total": 47
},
"results": [
{
"data1": {   
"subdata1":"subvalue1",
"subdata2":"subvalue2",
"subdata3":3,
"subdata4":{
"subsubdata1":"subvalue1"
}
}
},
{
"data2": {
"subdata1":"subvalue1",
"subdata2":"subvalue2",
"subdata3":3,
"subdata4":{
"subsubdata1":"subvalue1"
}
}
}
] 
} 

在这种情况下,您可能希望在键results中的子列表上运行相同的函数。您也可以使用类似的函数来执行此操作:

void consumeResponse(http.Response response) {
// decode the entire response string
final Map<String, dynamic> rawObject = jsonDecode(response.body);
// create the List<dynamic> from the results list in the sub object
final List<dynamic> records = rawObject['results'];
// count the records in the response
final int recordCount = records.length;
}

关闭

希望即使您的问题非常模糊,但您可以使用这些场景中的至少一个。如果可以的话,最好创建一些可以共享的"模拟数据"和/或"模拟代码"。该社区使用所有可用数据来构建他们的答案。您提供给我们的数据越多,您得到的答案就越好。

相关内容

  • 没有找到相关文章

最新更新