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

PHP后端调整数据结构适配Flutter客户端JSON解析

解决PHP后端返回多段JSON导致Flutter解析失败的问题

问题根源是后端两次独立输出JSON字符串,拼接后的内容不符合JSON语法规范,导致Flutter的jsonDecode抛出格式异常。只需在PHP端把所有要返回的数据合并到一个数组中,仅做一次JSON编码和输出即可解决。

调整PHP后端代码

方案1:合并登录状态与查询结果为顶层对象

把登录状态$login_data和查询结果$return_arr整合到同一个数组,统一输出:

// 合并所有需要返回的数据
$response = [
    'success' => $login_data['success'],
    'user' => $login_data['user'],
    'data' => $return_arr // 将查询结果作为data字段的值
];

// 设置响应头(确保客户端识别JSON格式,推荐添加)
header('Content-Type: application/json; charset=utf-8');
// 仅输出一次合法JSON
echo json_encode($response);

方案2:直接追加查询结果到原登录状态数组

如果$login_data本身已包含success、user等字段,可直接把查询结果追加进去:

// 将查询结果附加到登录状态数组中
$login_data['data'] = $return_arr;

header('Content-Type: application/json; charset=utf-8');
echo json_encode($login_data);

两种方案最终返回的合法JSON示例:

{
  "success": 1,
  "user": {"imie":"Name1","email":"abcdef@gmail.com"},
  "data": [
    {"email":"some.name1@gmail.com","data":"2023-09-27 20:22:42"},
    {"email":"some.name2@gmail.com","data":"2023-09-27 20:22:42"}
  ]
}

调整Flutter客户端代码

此时jsonDecode可正常解析,直接访问data['data']即可获取查询结果列表:

final response = await get(
  Uri.parse('https://www.somehost.com/API/abc.php'),
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer $token',
  }
);

if(response.statusCode == 200){
  var data = jsonDecode(response.body);
  if(data['success'] == 1) {
    print(data['user']['email']);     
    // 遍历查询结果
    List<dynamic> queryResults = data['data'];
    for(var item in queryResults){
      print('邮箱:${item['email']}');
      print('日期:${item['data']}');
    }
  } else {
    print(data['status']);
    print(data['message']);
  }
}else {
  print('请求失败...');
  print(response.statusCode);
}

额外注意事项

  • 确保PHP代码无多余输出(如空格、注释、调试echo等),任何非JSON内容都会导致解析失败
  • 始终设置Content-Type: application/json响应头,帮助客户端正确识别数据类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:07:53