
本文详解如何使用 json_decode() 将 json 字符串安全转换为 php 数组,并针对多层嵌套对象进行键值提取、过滤与重组,满足自定义结构输出需求。
在 PHP 中解析 JSON 并转换为数组,核心依赖内置函数 json_decode()。该函数默认返回 stdClass 对象,但通过设置第二个参数为 true,可直接获得关联数组(而非对象),极大简化后续数据操作。
以下是你提供的 JSON 示例的完整处理流程:
$json = '{
"a": { "a": "10", "q": "dumb text" },
"b": { "a": "23:00", "q": "dumb text" },
"c": { "a": null, "q": "dumb text" }
}';
// ✅ 步骤1:解码为关联数组(关键:第二个参数设为 true)
$data = json_decode($json, true);
// ✅ 步骤2:提取所有二级对象(即每个键对应的值),形成标准数组
$result = array_values($data);
// ✅ 步骤3(可选):按需修改字段内容(如你示例中期望的 "dumb text 1"、数值替换等)
foreach ($result as $key => &$item) {
// 示例:将 q 字段追加序号(从 1 开始)
$item['q'] = 'dumb text ' . ($key + 1);
// 示例:将 a 字段统一转为数字(若原值为字符串数字)或做映射处理
if ($item['a'] === '10') $item['a'] = '10'; // 保留
elseif ($item['a'] === '23:00') $item['a'] = '20'; // 自定义映射
elseif ($item['a'] === null) $item['a'] = '30'; // 处理 null
}
// 最终结果
print_r($result);
// 输出:
// Array (
// [0] => Array ( [a] => 10 [q] => dumb text 1 )
// [1] => Array ( [a] => 20 [q] => dumb text 2 )
// [2] => Array ( [a] => 30 [q] => dumb text 3 )
// )⚠️ 重要注意事项:
- 始终检查 json_decode() 返回值是否为 null,以判断 JSON 格式是否合法:
if (json_last_error() !== JSON_ERROR_NONE) { throw new InvalidArgumentException('Invalid JSON: ' . json_last_error_msg()); } - 若原始 JSON 中存在 null 值(如 "c": { "a": null, ... }),PHP 会如实映射为 null,需显式处理,避免后续逻辑异常。
- array_values() 是提取“所有值”并重置数字索引的关键——它剥离了原始顶层键("a"/"b"/"c"),只保留内部对象,完美匹配你目标中的纯数组结构。
✅ 总结:json_decode($json, true) 是起点;array_values() 是结构归一化的桥梁;而循环遍历与条件赋值则赋予你完全可控的数据重塑能力。三者结合,即可稳健实现任意 JSON 到定制化数组的转换。
立即学习“PHP免费学习笔记(深入)”;











