PHP json_decode函数无法解析支付网关返回的JSON数据求助
问题分析与解决:json_decode处理截断后的JSON仍无效
可能原因及解决办法:
- 截取逻辑不准确:原响应末尾可能不止一个多余字符,或者存在不可见字符(如换行、空格、制表符),导致
substr($server_output, 0, -1)只去掉了最后一个字符,但剩余内容仍不合法。
解决:可以用更精准的方式清理内容,比如:- 用
rtrim($server_output, '1')去掉末尾所有的“1”; - 用正则匹配完整JSON结构:
preg_match('/^\{.*\}$/s', $server_output, $matches); $clean_json = $matches[0] ?? '';
- 用
- 未检查JSON解析错误:
json_decode失败时会返回null,但你可能误以为返回的是JSON字符串。可以通过PHP内置函数排查具体错误:$cleaned = substr($server_output, 0, -1); $decoded = json_decode($cleaned, true); if (json_last_error() !== JSON_ERROR_NONE) { echo '解析错误:' . json_last_error_msg(); } - 误解输出结果:如果直接
echo $decoded,数组/对象会被转为字符串Array,可能让你误以为还是JSON格式。应该用var_dump($decoded)或者print_r($decoded)查看实际解析后的结构。
内容的提问来源于stack exchange,提问作者JKSDS
相关产品推荐
相关产品推荐

