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

Flutter调用自定义PHP/MySQL接口JSON格式不兼容问题排查

问题解决:Flutter解析PHP返回的JSON数据失败

问题核心

你的PHP接口返回的JSON中,userId和id是字符串类型(带引号),但Flutter的User类里这两个字段定义为int类型,类型不匹配导致解析失败,无法将数据填充到UI中。

两种可行解决方案

方案一:修改PHP代码,返回整数类型的数字

在json_encode时添加JSON_NUMERIC_CHECK参数,PHP会自动将字符串形式的数字转为JSON整数格式:

$sql = "select supplier_id as userId,  id, 'TEST for Title' as title, 'Test for Body' as body from sales_orders";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

$rows = $result->fetch_all(MYSQLI_ASSOC);

header('Content-type: application/json');
  
echo json_encode($rows, JSON_NUMERIC_CHECK); // 新增参数确保数字以整数返回

方案二:修改Flutter代码,将字符串转为整数

如果不想调整后端逻辑,在Dart解析数据时手动把字符串类型的数字转为int:

// 修改getRequest方法中的User实例化部分
User user = User(
    id: int.parse(singleUser["id"]), // 字符串转int
    userId: int.parse(singleUser["userId"]),
    title: singleUser["title"],
    body: singleUser["body"]);

额外优化:添加错误捕获(可选)

在Flutter的请求方法中加入异常捕获,方便快速定位问题:

Future<List<User>> getRequest() async {
    String url = "你的测试站点接口地址";
    try {
        final response = await http.get(url);
        if (response.statusCode == 200) {
            var responseData = json.decode(response.body);
            List<User> users = [];
            for (var singleUser in responseData) {
                User user = User(
                    id: int.parse(singleUser["id"]),
                    userId: int.parse(singleUser["userId"]),
                    title: singleUser["title"],
                    body: singleUser["body"]);
                users.add(user);
            }
            return users;
        } else {
            throw Exception('请求失败,状态码:${response.statusCode}');
        }
    } catch (e) {
        print('解析错误:$e');
        throw e;
    }
}

内容的提问来源于stack exchange,提问作者The Mac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:10:23