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

如何解决JSON编码问题?PHP JSON解析报错排查与修复

问题根源&修复方案

你这明显是搞混了json_encode和json_decode的用法呀!

核心问题

你的$response本身已经是一个合法的JSON格式字符串了,结果你反而用了json_encode()——这个函数是用来把PHP变量(对象/数组)转换成JSON字符串的,而不是把JSON字符串解析成PHP能处理的数据结构。

当你执行json_encode($response)之后,$json其实变成了一个被转义后的字符串(比如原本的双引号都会被再加一层转义),而不是你期望的对象或数组。这时候你试图用$json->status或$json['status']去访问,PHP自然会报错,因为字符串根本没有这些属性/索引。

修复步骤

把json_encode换成json_decode就搞定了,这个函数才是用来把JSON字符串解析成PHP对象或关联数组的:

方案1:解析为对象(默认行为)

$response = "{\"status\":\"success\",\"message\":\"Hosted Link\",\"data\":{\"link\":\"https:\/\/checkout-testing.herokuapp.com\/v3\/hosted\/pay\/9975b42eec3bfddf56c3\"}}";
// 用json_decode解析成PHP对象
$json = json_decode($response);
// 通过->访问属性
echo $json->status; // 输出:success

方案2:解析为关联数组(传第二个参数为true)

$response = "{\"status\":\"success\",\"message\":\"Hosted Link\",\"data\":{\"link\":\"https:\/\/checkout-testing.herokuapp.com\/v3\/hosted\/pay\/9975b42eec3bfddf56c3\"}}";
// 第二个参数传true,解析成关联数组
$json = json_decode($response, true);
// 通过数组索引访问
echo $json['status']; // 输出:success

额外小提示

如果不确定JSON字符串是否合法,可以用json_last_error()来排查解析错误,比如:

$json = json_decode($response);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo 'JSON解析错误:' . json_last_error_msg();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:33:26