尝试获取 json 响应时出错 [Flutter]

Posted

技术标签:

【中文标题】尝试获取 json 响应时出错 [Flutter]【英文标题】:Error from trying to get the json response [Flutter] 【发布时间】:2021-06-17 19:07:49 【问题描述】:

我尝试通过从服务器获取 json 响应来调用数据。

Future<List<Users>> getUserLogin() async
  String url= login_url;
  var res = await http.get(url);

  if(res.statusCode==200)
    var list = json.decode(res.body) as List;  
    print(list);
    List<Users> users =  list.map((i)=>Users.fromJson(i)).toList();
    print(users);
    return users;
  
  else
    print("bad request");
  

但是,我收到此错误消息,无法获取数据。

[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' in type cast

顺便说一下,这是我尝试调用的json数据。

"customer_id":4,
"username":"aa",
"password":"bb",
"firstname":"a",
"lastname":"b",
"birthday":"Feb 15, 2021",
"phone":"906583794",
"cus_email":"aaa@gmail.com"

【问题讨论】:

【参考方案1】:

我如何将我获得的数据返回到“用户”,因为它仍然是 json 数据,如果我返回超过 1 次,另一个将是死代码。

功能:

  Future<bool> checkLogin(String username,String password) async 
  if(username.isEmpty||password.isEmpty)
    print("Invalid username or password");
    return false;
  
  String url = login_url;
  url = url.replaceFirst("p1", username);
  url = url.replaceFirst("p2", password);
  var result = await http.get(url);
  var data = json.decode(result.body);
  if(username==data["username"]&&password==data["password"])
    print(result.body);
    Users users = Users.fromJson(json.decode(result.body));
    return true;
  
  else
    return false;
  

结果.正文:

"customer_id":4,"username":"aa","password":"bb","firstname":"a","lastname":"b","birthday":"Feb 15, 2021","phone":"906583794","cus_email":"aaa@gmail.com"

【讨论】:

【参考方案2】:

根据你传递的响应对象,你必须修改从列表返回给用户的数据类型,因为你期望的这个json不是一个数组而是一个对象。

解释清楚后,您应该:

    修改函数的返回类型:

    Future&lt;User&gt; getUserLogin() async ...

    验证 OK 响应 (200) 后,试试这个:

    return User user = User.fromJson(res.body);

【讨论】:

您好,我刚试过,但是“res.body”这个词有错误:“错误:参数类型'String'不能分配给参数类型'Map '。” 试试这个:return User user = User.fromJson(json.decode(res.body)); 它返回“Instance of 'Users'”,数据仍然为空? 您能提供对请求的响应吗? “res.body”的值 根据您的问题,我还尝试打印另一个现有函数的 res.body ,我发现可以使用该函数调用数据。对不起,我错了。 ? 但是,我还有另一个问题。我会将问题和功能作为另一个答案发布。

以上是关于尝试获取 json 响应时出错 [Flutter]的主要内容,如果未能解决你的问题,请参考以下文章

使用flutter和php创建用户登录时解析json数据时出错

尝试解析带引号的 JSON 响应时出错

Flutter - 无法将所有 json 数据从 api 响应保存到 Iterable List 编辑:(无法从可迭代列表中获取数据)

将 XML 响应转换为 Json 时出错

从 StreamBuilder BloC firestore Flutter 获取数据时出错

使用body.json()解析来自http.get()的响应时出错