如何解决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
相关产品推荐
相关产品推荐

