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

PHP生成JSONArray部署至真实服务器后出现JSON解析异常求助

解决Java解析PHP生成JSON时的JSONObject转换错误

这种问题大多是因为服务器上的PHP输出不是纯JSON内容,或者JSON格式存在问题,导致Java端拿到的是混杂了其他字符串的响应,没法直接转成JSONObject。结合你的情况,给你一步步排查和解决的方案:

1. 先确认服务器返回的内容是否纯净

本地EasyPHP环境可能默认关闭了错误提示,但真实服务器往往开启了display_errors,这会导致PHP输出警告、错误信息(比如数据库连接警告、变量未定义提示),这些内容会混在JSON前后,让整个响应变成"错误信息+JSON"的字符串,Java自然没法解析成JSONObject。

排查方法:直接在浏览器访问服务器上的PHP文件,查看页面源代码,看是不是只有你预期的JSON内容,有没有额外的文字、HTML标签或者空白行。

解决办法:

  • 在PHP文件最开头加上以下代码,强制关闭错误输出:
error_reporting(0);
ini_set('display_errors', 0);
  • 检查PHP文件的开头:<?php前面不能有任何空白字符(空格、换行、制表符),结尾可以直接去掉?>,避免后面不小心加了空白内容。

2. 强制设置JSON响应头

服务器可能默认把PHP输出当成普通文本返回,导致Java端没有正确识别这是JSON数据。在输出JSON之前,一定要设置响应头:

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

这行代码会告诉客户端(你的Java程序):返回的是UTF-8编码的JSON格式数据,避免解析时出现编码或类型识别问题。

3. 验证JSON格式的正确性

即使本地生成的JSON没问题,服务器上的PHP版本或数据库返回的数据可能有差异,导致生成的JSON有语法错误(比如引号不闭合、多余的逗号、转义错误)。

排查方法:把服务器返回的JSON内容复制到JSON校验工具(比如本地的JSONlint)里检查,看是否有语法错误。

解决办法:

  • 确保用PHP的json_encode()函数生成JSON,不要手动拼接(手动拼接很容易出格式错误)。
  • 如果数据里有中文,加上JSON_UNESCAPED_UNICODE参数,避免中文被转义成Unicode编码,也能减少格式出错的概率:
json_encode(['chemData' => $your_data_array], JSON_UNESCAPED_UNICODE);

4. 检查PHP版本和扩展差异

本地EasyPHP的PHP版本可能和服务器不同,旧版本的json_encode对某些数据结构的处理可能有差异。另外,要确保服务器上的PHP开启了json扩展(大部分服务器默认开启,但可以通过phpinfo()确认)。

完整的示例PHP代码

结合上面的要点,你的PHP文件可以写成这样:

<?php
// 关闭错误输出,防止干扰JSON内容
error_reporting(0);
ini_set('display_errors', 0);

// 设置JSON响应头
header('Content-Type: application/json; charset=utf-8');

// 数据库连接示例(替换成你的服务器数据库信息)
$db_host = 'localhost';
$db_user = 'your_db_user';
$db_pass = 'your_db_password';
$db_name = 'your_db_name';

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
    // 即使连接失败,也要返回合法的JSON错误信息,而不是直接输出警告
    echo json_encode(['error' => 'Database connection failed']);
    exit;
}

// 查询数据
$query = "SELECT ID, TYPE, COMPANY, SOLIDC, GRAMNEED, SOLUSE, PRICE FROM your_table";
$result = mysqli_query($conn, $query);

$chemData = [];
while ($row = mysqli_fetch_assoc($result)) {
    $chemData[] = $row;
}

// 生成并输出JSON
echo json_encode(['chemData' => $chemData], JSON_UNESCAPED_UNICODE);

// 关闭数据库连接
mysqli_close($conn);
?>

按照上面的步骤排查和修改,应该就能解决Java端的JSON解析错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:00