
本文介绍如何使用 php 的 json_decode() 和 array_column() 函数,从结构可变的嵌套 json 中自动批量提取某一键(如 "vm")的所有值,无需硬编码索引,适用于动态 json 响应场景。
本文介绍如何使用 php 的 json_decode() 和 array_column() 函数,从结构可变的嵌套 json 中自动批量提取某一键(如 "vm")的所有值,无需硬编码索引,适用于动态 json 响应场景。
在处理 API 返回的 JSON 数据时,常遇到结构固定但元素数量动态变化的情况——例如你提供的 JSON 中,"value" 是一个对象数组,每个元素都包含 "vm"、"name" 和 "cpu_count" 字段,但数组长度不固定。此时,手动遍历或逐个索引(如 $arr['value'][0]['vm'])不仅冗余,还易出错且不可扩展。
PHP 提供了简洁高效的解决方案:
- 使用 json_decode($json, true) 将 JSON 字符串安全转换为关联数组;
- 利用内置函数 array_column() 直接提取嵌套数组中指定键的所有值。
✅ 示例代码如下:
<?php
$json = '{
"value": [
{"vm": "vm-1060", "name": "node10", "cpu_count": 16},
{"vm": "vm-1063", "name": "node2", "cpu_count": 16},
{"vm": "vm-1064", "name": "node0", "cpu_count": 16}
]
}';
// 步骤1:解析 JSON 为关联数组
$arr = json_decode($json, true);
// 步骤2:自动提取所有 "vm" 字段的值(返回索引数组)
$vmList = array_column($arr['value'], 'vm');
print_r($vmList);
// 输出:
// Array
// (
// [0] => vm-1060
// [1] => vm-1063
// [2] => vm-1064
// )
?>⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 确保 $json 是合法 JSON 字符串,建议添加错误检查:
if (json_last_error() !== JSON_ERROR_NONE) { throw new InvalidArgumentException('Invalid JSON: ' . json_last_error_msg()); } - 若 "value" 键可能不存在,应先校验:
if (!isset($arr['value']) || !is_array($arr['value'])) { $vmList = []; } else { $vmList = array_column($arr['value'], 'vm'); } - array_column() 自 PHP 5.5.0 起可用,兼容主流环境;若需支持更老版本,可用 array_map() 替代(但性能略低)。
该方法具备强健性、可读性与扩展性——只需修改字段名(如 'name' 或 'cpu_count'),即可复用同一逻辑提取任意字段,是处理动态 JSON 列表的标准实践。



















