PHP中用foreach遍历JSON报错:未定义数组键'name'
问题解决:PHP解析cats.json展示猫咪列表错误修复
错误原因
你当前的代码直接遍历了解码后的整个JSON数组,但实际上JSON的顶层结构是一个包含cats键的对象,对应的才是猫咪数据的数组。直接遍历$cats_json会先拿到cats这个键对应的完整数组,此时尝试访问$cat['name']自然会报错——因为$cat是整个猫咪列表数组,而非单个猫咪对象。
修正后的完整代码
<?php $cats_file = './_inc/cats.json'; // 检查文件是否存在且可读 if (!file_exists($cats_file) || !is_readable($cats_file)) { echo "无法读取猫咪数据文件"; exit; } $cats_data = file_get_contents($cats_file); // 检查JSON解码是否成功 $cats_json = json_decode($cats_data, TRUE); if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON解码失败:" . json_last_error_msg(); exit; } // 确保cats数组存在且格式正确 if (!isset($cats_json['cats']) || !is_array($cats_json['cats'])) { echo "猫咪数据格式错误"; exit; } // 遍历真正的猫咪列表数组 foreach ($cats_json['cats'] AS $cat): ?> <div>猫咪信息卡片</div> <h3><strong><?php echo htmlspecialchars($cat['name']);?></strong></h3> <p>品种:<?php echo htmlspecialchars($cat['type']);?></p> <p>性别:<?php echo htmlspecialchars($cat['sex']);?></p> <p>ID:<?php echo htmlspecialchars($cat['id']);?></p> <div>卡片底部</div> <?php endforeach;?>
关键优化点
- 循环对象改为
$cats_json['cats'],确保遍历的是单个猫咪对象 - 增加文件存在性、可读性检查,避免路径错误导致的问题
- 增加JSON解码错误检查,方便快速排查格式问题
- 使用
htmlspecialchars()输出内容,避免XSS注入风险(前端输出的最佳实践)
内容的提问来源于stack exchange,提问作者Lexiriam
相关产品推荐
相关产品推荐

