PHP中将JSON转为数组最常用方法是json_decode($json, true),返回关联数组;若省略true则返回对象,需用->访问;非法JSON返回null,可用json_last_error()检测。

PHP中把JSON对象转成数组,最常用也最直接的方法是用 json_decode() 函数,并设置第二个参数为 true。
json_decode():核心函数,控制返回类型
该函数用于解码 JSON 字符串。关键在于第二个参数:
- 不传或设为 false(默认)→ 返回 stdClass 对象(即类实例,类似 JavaScript 的对象)
- 设为 true → 返回 关联数组(键值对形式的 array)
-
✅ 正确示例:
$arr = json_decode('{"name":"张三","age":25}', true);
结果:['name' => '张三', 'age' => 25](可直接用$arr['name']访问) -
❌ 错误写法:
$obj = json_decode('{"name":"张三"}');
此时$obj是对象,必须用$obj->name,不能用$obj['name']
注意 JSON 字符串格式是否合法
如果传入的 JSON 格式错误(比如中文没加双引号、多逗号、单引号代替双引号),json_decode() 会返回 null,且不报错。
- 可用 json_last_error() 检查错误:
json_decode($json); if (json_last_error() !== JSON_ERROR_NONE) { echo json_last_error_msg(); } - 常见问题:前端传来的 JSON 含 HTML 实体、换行符未转义、或用了单引号 —— PHP 不认,需前端修正或服务端预处理
嵌套结构自动转为多维数组
只要第二个参数为 true,无论 JSON 多深,都会递归转成数组(包括对象、数组混合结构)。
- 例如:
$json = '{"user":{"info":{"id":100,"tags":["php","web"]}}}';$data = json_decode($json, true);
可直接访问:$data['user']['info']['tags'][0]→"php" - 注意:JSON 中的数字键(如
{"0":"a","1":"b"})也会变成数组索引,但若键含非数字字符(如"id_1"),仍保留为字符串键
其他情况:强制转数组(不推荐)
极少数场景下,你拿到的是一个 stdClass 对象(比如忘了加 true),想“补救”转成数组,可用 (array) 强制类型转换:
立即学习“PHP免费学习笔记(深入)”;
-
$obj = json_decode('{"name":"李四"}'); $arr = (array)$obj;
但注意:这只做浅层转换,**嵌套的对象不会递归转数组**;而且私有/受保护属性可能丢失 - 更稳妥的方式仍是重新用
json_decode($json, true),而不是依赖强制转换



















