PHP如何解析包含数组的JSON 提取nodes节点下的id与time值
PHP解析包含数组的JSON结构解决方案
你调用json_decode($json, TRUE)时传入了第二个参数TRUE,已经将JSON整体转为了关联数组,无法取值的核心原因是nodes字段对应的值是索引数组+关联数组的嵌套结构,需要按层级指定下标访问:
$details['nodes']对应整个nodes数组,是索引数组,数组元素对应你JSON里的两个对象- 索引数组的下标从0开始计数,第一个节点的下标为
0,第二个为1 - 每个节点本身是关联数组,可以用
id、time作为键取值
具体取值示例
- 单独取指定节点的字段
// 取第一个节点的id echo $details['nodes'][0]['id']; // 输出68 // 取第一个节点的time echo $details['nodes'][0]['time']; // 输出987 // 取第二个节点的id echo $details['nodes'][1]['id']; // 输出69
- 遍历所有nodes节点批量取值
foreach($details['nodes'] as $node) { echo 'id: ' . $node['id'] . ',time: ' . $node['time'] . '<br>'; }
原有代码的优化建议
- 不要使用
@错误抑制符,会掩盖请求失败、JSON格式错误等问题,排查时可以先去掉方便定位问题 - 关联数组的字符串键需要加单引号,你原有代码里的
$details[code]写法不规范,应当改为$details['code'] - 可以加JSON解析校验逻辑,避免JSON格式异常导致后续报错:
$details = json_decode($json, TRUE); if (json_last_error() !== JSON_ERROR_NONE) { die('JSON解析失败: ' . json_last_error_msg()); }
内容的提问来源于stack exchange,提问作者juliaroje86
相关产品推荐
相关产品推荐

