PHP中如何读取$response对象内嵌套的response中的success属性?
解决嵌套JSON响应的取值问题
嘿,你遇到的问题其实很常见——你的$response->response并不是一个PHP对象或者数组,而是JSON格式的字符串!这就是为什么你直接用->success或者["success"]都得不到正确结果的原因:
- 用
$response->response->success时,因为它是字符串而非对象,自然找不到success属性; - 用
$response->response["success"]时,PHP会把字符串当成字符数组处理,它会把字符串键名默认转成整数0,所以你拿到的是JSON字符串的第一个字符{,这就解释了为什么只返回这个符号。
正确的解决步骤:
你需要先把这个JSON字符串解析成PHP能识别的对象或关联数组,用json_decode()函数就能搞定:
方法1:解析成PHP对象
// 把JSON字符串转成PHP对象 $parsedResponse = json_decode($response->response); // 现在就可以用对象属性的方式取值了 var_dump($parsedResponse->success); // 会输出bool(false)
方法2:解析成关联数组
如果更习惯用数组的方式操作,给json_decode()加第二个参数true:
// 把JSON字符串转成关联数组 $parsedResponse = json_decode($response->response, true); // 用数组键名取值 var_dump($parsedResponse['success']); // 同样输出bool(false)
额外小提示
如果担心JSON解析失败,可以加个错误判断:
$parsedResponse = json_decode($response->response); if (json_last_error() === JSON_ERROR_NONE) { // 解析成功,正常取值 echo $parsedResponse->success; } else { // 解析失败,处理错误 echo 'JSON解析出错:' . json_last_error_msg(); }
内容的提问来源于stack exchange,提问作者charlie
相关产品推荐
相关产品推荐

