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

SOAP获取PHP数组转JSON前端解析报错求助

解决JSON解析报错:SyntaxError: Unexpected non-whitespace character after JSON

问题重现

通过SOAP协议获取数据转为PHP数组后,使用json_encode生成JSON输出,前端fetch解析时出现如下错误:

SyntaxError: Unexpected non-whitespace character after JSON at position 5795

单独保留站点名称+坐标,或站点名称+时间字段时JSON解析正常,同时包含所有字段则报错。

排查与解决步骤

1. 在PHP端直接检测JSON编码错误

先给PHP代码添加编码错误检测,快速定位后端问题根源:

$jsondata = json_encode($geostation);
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON编码失败: ' . json_last_error_msg());
}
echo $jsondata;

这会直接输出编码时的具体错误信息(比如非法字符、编码不兼容等),不用依赖前端报错。

2. 处理SOAP返回的字段类型与编码

SOAP返回的属性可能是SimpleXMLElement对象而非字符串,或者包含非UTF-8编码的字符、不可见控制字符,导致json_encode处理异常。修改字段赋值逻辑,强制转字符串并清理内容:

$geostation = array();
foreach ($res->TripPointArr as $point) {
    // 强制转为字符串并清理首尾空白
    $stationName = trim((string)$point->StationNm);
    $longitude = trim((string)$point->StLONGITUDE);
    $latitude = trim((string)$point->StLATITUDE);
    $timearrft = trim((string)$point->DtTmArrivalFt);
    
    // 过滤不可见控制字符(针对特殊异常情况)
    $cleanTime = preg_replace('/[\x00-\x1F\x7F]/u', '', $timearrft);
    
    $geostation[] = array(
        'stationName' => mb_convert_encoding($stationName, 'UTF-8', 'auto'),
        'longitude' => mb_convert_encoding($longitude, 'UTF-8', 'auto'),
        'latitude' => mb_convert_encoding($latitude, 'UTF-8', 'auto'),
        'timearrft' => mb_convert_encoding($cleanTime, 'UTF-8', 'auto')
    );
}
$jsondata = json_encode($geostation);
echo $jsondata;

3. 确保PHP输出无额外内容

检查getdata.php文件:

  • <?php标签前不能有空格、换行或HTML代码
  • 确认没有其他echo、var_dump等输出额外内容的代码
  • 避免文件带有UTF-8 BOM(可通过编辑器查看并移除)

4. 定位具体错误数据

如果以上步骤未解决问题,可临时输出报错位置附近的原始数据,查看是否存在特殊字符:

// 循环时添加索引,定位问题数据
$index = 0;
foreach ($res->TripPointArr as $point) {
    // 替换20为接近报错位置的索引值,输出对应原始数据
    if ($index === 20) {
        var_dump($point);
        die;
    }
    $index++;
    // ... 原有赋值逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:23:19