【发布时间】:2021-11-13 21:18:21
【问题描述】:
我将 JSON 作为字符串从 response.body 发送,但得到“未处理的异常:类型 'String' 不是类型转换中的 'Map
我尝试将返回值转换为 List,但我猜 extractData 应该改变,卡在这里。 "s" 是 JSON 字符串。
getVacDates 函数仅用于通过映射从 JSON 中获取日期或总值,例如 [10/14/21, 10/15/21, 10/16/21...]。
static List<String> getVacDates(String s) {
final newList = jsonEncode(s);
final extractedData = jsonDecode(newList) as Map<String, dynamic>;
final china= extractedData['timeline'].map((e) => e["date"]);
List<String> StringList = china.cast<String>();
print(StringList);
return StringList;
}
JSON 信息如下:
{"country":"USA","timeline":
[{"total":409571117,"daily":757824,"totalPerHundred":121,"dailyPerMillion":2253,"date":"10/14/21"},
{"total":410559043,"daily":743873,"totalPerHundred":122,"dailyPerMillion":2212,"date":"10/15/21"},
{"total":411028977,"daily":737439,"totalPerHundred":122,"dailyPerMillion":2193,"date":"10/16/21"},
{"total":411287235,"daily":731383,"totalPerHundred":122,"dailyPerMillion":2175,"date":"10/17/21"}]}
简化程序:
responseVac = await http.get('https://disease.sh/v3/covid-19/vaccine/coverage/countries/usa?lastdays=3');
var data = MyFile.myFunction(xxx, yyy, responseVac.body);
在我的文件中:
static ChartsData myFunction(String xxx, bool yyy, String responseVac) {
List<String> getVacDates(String s) =>
[for (final data in jsonDecode(s)['timeline']) data['date'] as String];
print(getVacDates(responseVac));
【问题讨论】:
-
先做
newList = jsonEncode(s)然后再做jsonDecode(newList)有什么意义?此外,由于 JSON 以[开头,因此解析时您的 JSON 字符串最终会返回List<dynamic>。 -
因为来自stackoverflow.com/a/69955879/17393881 的序列化映射解决方案需要获取日期、总值作为列表。 (我没有其他可行的解决方案,所以我使用它)
-
不是吗?这是一个示例,展示了如何将数据转换为 JSON 字符串,然后再将其解码回来。这不是您应该在同一方法中执行这两个步骤的示例。在你给出的这个例子中,你已经有一个 JSON 格式的字符串,所以你不应该做
jsonEncode(s)。 -
但我无法将其映射到原始 json。我也发现了问题的原因。如果我手动编写 json,则代码可以工作,但如果我从参数中获取,则会出现转换错误。改成“Object s”还是一样。
-
您确定发布的 JSON 文件吗?它以
}结尾,但以[开头,这使其无效,但也可能表明这部分JSON 是从其他JSON 结构中截取的?