json_decode()默认返回对象,需用→访问属性;加true参数返回关联数组,可用foreach遍历;遍历前应检查json解析是否成功,并用var_dump确认结构。

PHP 中用 json_decode() 解析 JSON 字符串后,得到的是对象(默认)或数组(加第二个参数 true),遍历方式取决于你选择的返回类型。关键点是:**先明确解码结果类型,再选对应遍历方法**。
确认解码结果是对象还是数组
默认情况下:$data = json_decode($json); → 返回 stdClass 对象,不能用 foreach($data as $k => $v) 直接遍历(除非对象属性可枚举且没被设为 private)。
加 true 参数:$data = json_decode($json, true); → 返回 关联数组,支持标准 foreach 和 for 遍历。
遍历关联数组(推荐,更灵活)
加 true 参数后,数据结构清晰,适合大多数场景:
- 单层数组:
foreach ($data as $key => $value) { echo "$key: $value"; } - 多层嵌套(如 JSON 是对象数组):
foreach ($data as $item) { echo $item['name'] ?? 'N/A'; } - 安全遍历带可能缺失字段的数据,配合空合并操作符
??或isset()
遍历对象(需注意属性访问方式)
若保持默认对象形式,必须用对象语法访问属性:
- 已知结构时:
echo $data->name; echo $data->items[0]->title; - 不确定属性是否存在,先检查:
if (isset($data->users) && is_array($data->users)) { foreach ($data->users as $user) { ... } } - 想统一转成数组再遍历?可强制转换:
$arr = (array) $data;——但注意:私有/受保护属性会带类名前缀,不推荐用于复杂对象
常见错误和建议
不要跳过错误检查:$data = json_decode($json, true); if (json_last_error() !== JSON_ERROR_NONE) { die('JSON 解析失败'); }
- 中文等 UTF-8 内容确保 JSON 字符串本身编码正确(无乱码、无 BOM)
- 嵌套太深时,别硬写多层
->或['...']['...'],可先提取中间变量提升可读性 - 调试时用
var_dump($data)或print_r($data)看清实际结构,再写遍历逻辑
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











