PHP解析JSON解码数组:无法获取status/detail值,foreach无输出求助
问题分析与解决办法
嘿,我来帮你揪出循环没生效的原因!
核心问题:JSON解码的类型不对
你遇到的情况大概率是JSON解码时没转成关联数组。默认情况下,PHP的json_decode()函数会把JSON字符串转换成stdClass对象,而不是关联数组。这时候你用$result['status']这种数组下标去访问对象的属性,会直接触发PHP错误(如果错误没显示的话,脚本就直接终止了,循环里的echo "test"自然不会输出)。
你的原始JSON结构是这样的:
{"status": [{"status": "403","detail": "Invalid Voucher Code.asdadsasd"}]}
如果没加参数解码,$result是一个对象,正确的访问方式应该是$result->status,而不是$result['status']——这就是循环根本没执行的关键原因。
解决步骤
正确解码JSON为关联数组
调用json_decode()时一定要加上第二个参数true,强制转换成关联数组:// 假设$json是你的原始JSON字符串 $result = json_decode($json, true);正常遍历数组并取值
这时候你的foreach循环就能正常运行了,还可以直接取出status和detail的值:foreach($result['status'] as $item) { echo "状态码:" . $item['status'] . "\n"; echo "详情:" . $item['detail'] . "\n"; }
额外建议:开启错误提示
如果以后再遇到类似“代码没执行”的情况,建议在脚本开头开启错误报告,能快速定位问题:
error_reporting(E_ALL); ini_set('display_errors', 1);
内容的提问来源于stack exchange,提问作者Ganesh
相关产品推荐
相关产品推荐

