You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:10:33