_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<Map<dynamic, dynamic>>' 的子类型

Posted

技术标签:

【中文标题】_InternalLinkedHashMap<String, dynamic>\' 不是类型 \'List<Map<dynamic, dynamic>>\' 的子类型【英文标题】:_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<Map<dynamic, dynamic>>'_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<Map<dynamic, dynamic>>' 的子类型 【发布时间】:2019-04-03 10:39:58 【问题描述】:
    void makeLoginReq() async 
    String url = 'https://travel.prabidhee.com/api/login';
    Map map = 
      'email': email,
      'password': password,
    ;
    print(await apiRequest(url, map));
    final response = await apiRequest(url, map);
    print(response);
    List<Map> reply = json.decode(response);
    List<UserModelData> result = reply.map((item) => new UserModelData.fromJson(item)).toList();
    print(result[0].accessToken);
  

  Future<String> apiRequest(String url, Map jsonMap) async 
    HttpClient httpClient = new HttpClient();
    HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
    request.headers.set('Accept', 'application/json');
    request.headers.set('Content-type', 'application/json');
    request.add(utf8.encode(json.encode(jsonMap)));
    HttpClientResponse response = await request.close();
    var reply = await response.transform(utf8.decoder).join();
    httpClient.close();
    print(reply);
    return (reply);
  

这是远程服务器登录请求的功能。登录后,json 响应被解码并存储在回复变量中。现在我想从响应中提取每个元素,如 access_token 、 token_type ...。我怎样才能做到这一点 ?

【问题讨论】:

【参考方案1】:

正如异常读取的那样,您的问题是您将地图投射到列表中,这是不可能的。就像您不能将字符串转换为整数一样,或者您不能将雨虫视为一匹马并骑着它到日落。 问题当然是为什么会发生这种情况:json.decode(response) 行返回一个映射,但您要分配此映射的变量可能只存储一个列表。 例如,如果您的回复如下所示:


    "body": [
        "Alisa",
        "Alex",
        "Boby",
        "Monica"
    ]

那么您的json.decode(response) 将是Map&lt;String, List&gt;("body" to ["Alisa", ...]),因此正文映射到名称。 假设您想将列表与其他 json 隔离,您可以只执行 json.decode(response).get("body") 或者如果您的 json 看起来不同,您还可以通过调用 json.decode(response).values()json.decode(response).keys() 获取映射中的所有值或键。

【讨论】:

如果你能编辑上面的代码会很有帮助

以上是关于_InternalLinkedHashMap<String, dynamic>' 不是类型 'List<Map<dynamic, dynamic>>' 的子类型的主要内容,如果未能解决你的问题,请参考以下文章

_CastError(类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中类型 'Map<String, dynamic>

NoSuchMethodError:类 '_InternalLinkedHashMap<String, dynamic>' 没有具有匹配参数的实例方法 'cast'

_TypeError(类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型) F

type '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型

新:类型“_InternalLinkedHashMap<String, dynamic>”不是“DocumentSnapshot”类型的子类型

JsonSerializable - fromJson 在嵌套对象上抛出 _InternalLinkedHashMap<dynamic, dynamic> 异常