Flutter中无法获取Web服务器返回的JSON值问题求助
问题
无法获取Web服务器返回的JSON数据值。使用GET方法请求,服务器返回状态码200的JSON,但尝试获取JSON值时出错,打印selectedUserInfo返回null。
服务器返回的JSON结构:
{ "user": [ { "id": 2, "userName": "Mehmet", "email": "personal@test.com", "sys_role": 3, "tckn": "00000000000", "fk_parkID": 81 } ], "parks": [ { "parkID": 1, "parkName": "Park Name", "latitude": 42, "longitude": 29, "fk_regionID": 2 } // 另有107个类似的park对象 ] }
尝试获取user中userName值的代码:
var selectedUserInfo; var parksInfo; selectUser(id) async { // 选择用户以进行相关操作 var result = CallApi().getData('admin/user/${id}', _setHeaders()); selectedUserInfo = jsonDecode(result.body)["user"][0]["userName"]; parksInfo = jsonDecode(result.body)["parks"]; setState(() { }); }
解决方法
核心问题是没有等待异步请求完成。CallApi().getData是异步方法,直接赋值会得到一个Future对象而非实际响应数据,此时result.body不存在,导致JSON解析失败,最终selectedUserInfo为null。
修改代码,给getData调用加上await,确保拿到响应后再解析:
var selectedUserInfo; var parksInfo; selectUser(id) async { // 加上await等待请求完成 var result = await CallApi().getData('admin/user/${id}', _setHeaders()); // 先解析一次响应体,避免重复调用jsonDecode var responseJson = jsonDecode(result.body); selectedUserInfo = responseJson["user"][0]["userName"]; parksInfo = responseJson["parks"]; setState(() {}); }
额外建议:增加异常处理,避免请求失败或JSON结构不符合预期时崩溃:
selectUser(id) async { try { var result = await CallApi().getData('admin/user/${id}', _setHeaders()); var responseJson = jsonDecode(result.body); // 先判断user数组是否存在且非空,避免下标越界 if (responseJson.containsKey("user") && responseJson["user"].isNotEmpty) { selectedUserInfo = responseJson["user"][0]["userName"]; } // 给parksInfo设置默认空数组,防止null报错 parksInfo = responseJson["parks"] ?? []; setState(() {}); } catch (e) { print("请求或解析出错:$e"); // 可在此添加错误提示逻辑 } }
内容的提问来源于stack exchange,提问作者poxantidote
相关产品推荐
相关产品推荐

