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
相关产品推荐
相关产品推荐

