首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未处理的异常:类型“String”不是类型“Map<String,dynamic>”在类型转换中的子类型

未处理的异常:类型“String”不是类型“Map<String,dynamic>”在类型转换中的子类型
EN

Stack Overflow用户
提问于 2021-11-13 21:18:21
回答 1查看 5.3K关注 0票数 0

我从response.body中将JSON作为字符串发送,但是获得“未处理异常:类型' string‘不是类型为'Map’在类型cast‘中的子类型”的错误。--如果我手动编写JSON,代码就能工作。但是,如果从参数中获得JSON作为字符串,则会得到强制转换错误。

我试图将返回值转换为List,但我猜extractedData应该会改变,就放在这里。"s“是JSON字符串。

getVacDates函数仅用于通过映射从类似于[10/14/21, 10/15/21, 10/16/21...]的JSON中获取日期或总值。

代码语言:javascript
复制
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是:

代码语言:javascript
复制
{"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"}]}

简化程序:

代码语言:javascript
复制
responseVac = await http.get('https://disease.sh/v3/covid-19/vaccine/coverage/countries/usa?lastdays=3');
        var data = MyFile.myFunction(xxx, yyy, responseVac.body);

在MyFile中:

代码语言:javascript
复制
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));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-13 21:47:48

不完全确定你想得到什么,但是它是这样的吗?

代码语言:javascript
复制
import 'dart:convert';

void main() {
  print(getVacDates(jsonString)); // [10/14/21, 10/15/21, 10/16/21, 10/17/21]
}

List<String> getVacDates(String s) => [
      for (final timeline in jsonDecode(s)['timeline'])
        timeline['date'] as String
    ];

const jsonString = '''{
  "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"
    }
  ]
}''';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69958335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档