如何修复在flatter中解析json时的类型错误?

如何修复在flatter中解析json时的类型错误?,json,api,flutter,Json,Api,Flutter,我在试图从API解析json时遇到了一个问题,我遇到了下面的错误 Response response= await Dio().post(url ,data:{"login_credential":_tmp_email,'password' : _tmp_password}); if ( response.statusCode == 200 ){ var parsedJson = json.decode(response.data); print(parsedJson["resul

我在试图从API解析json时遇到了一个问题,我遇到了下面的错误

Response response= await Dio().post(url ,data:{"login_credential":_tmp_email,'password' : _tmp_password});

if ( response.statusCode == 200 ){

  var parsedJson =  json.decode(response.data);
  print(parsedJson["result"]);
  print(response.data);
}

} catch (e) {
  print(e);
}
错误:

类型“\u InternalLinkedHashMap”不是“String”类型的子类型

经过一些谷歌搜索和多次调试。我得出的结论是,返回的json的结构似乎非常复杂,这就是为什么解析它通常会有问题

json的结构如下所示

{
result: 1, 
msg: Login Success, 
data: {
  access_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvYXNpYS1hbGxuZXQuY29tXC9hcGlcL21vYmlsZS12MVwvYXV0aC5tYW51YWwubG9naW4iLCJpYXQiOjE1NTUxNjQ4OTIsImV4cCI6MTU1NTE2NTAxMiwibmJmIjoxNTU1MTY0ODkyLCJqdGkiOiJjRGtLTVNOMlBmUTdwYjgzIiwic3ViIjo2MTksInBydiI6Ijg2NjVhZTk3NzVjZjI2ZjZiOGU0OTZmODZmYTUzNmQ2OGRkNzE4MTgifQ.YlmzG5bMbXV2_pMa9v5oRItdVBpM878ocfiGD0YS6Zo, 
  token_type: bearer,
  expires_in: 119, 
  member: {
            name: john, email: jogn@gmail.com, id: 619, avatar_url: 
            https://example.com/images/img_avatar.png
          }
       }
}

如果我错了,请纠正我,我想我已经明白了,看起来dio作为http客户端已经解析了json响应,这就是为什么不需要json.decode

我可以通过钥匙访问数据

  print(response.data["result"]);
  print(response.data["data"]["member"]["name"]);

正如您已经猜到的,如果内容类型如此,Dio将响应解析为json。从文件中:

///[responseType]指示服务器将响应的数据类型
///[ResponseType]中定义的选项有`JSON`、`STREAM`、`PLAIN`。
///
///默认值为“JSON”,dio将自动将响应字符串解析为JSON对象
///当响应的内容类型为“application/json”时。
///
///例如,如果希望接收具有二进制字节的响应数据,
///下载图像时,请使用“流”。
///
///如果希望接收带有字符串的响应数据,请使用“PLAIN”。
ResponseType ResponseType;

如果您想要一个字符串,您可以在执行var parsedJson=json.decode(response.data)时使用
\u dio.post(“…”,data:…,options:options(responseType:responseType.plain))

;parsedJson成为键字符串和动态值的映射,因此它不再是json了,这太棒了!!