PHP数组与JSON互转使用json_encode()和json_decode()函数:前者将数组转为JSON字符串(关联数组→对象,索引数组→数组),后者将JSON字符串解析为PHP变量(加true参数返回数组);需注意UTF-8编码、中文处理(JSON_UNESCAPED_UNICODE)、错误检查(json_last_error)及数据类型映射。

PHP里数组和JSON互转非常简单,靠两个内置函数就能搞定:数组转JSON用 json_encode(),JSON转数组用 json_decode()。
数组转JSON(json_encode)
把PHP数组(包括关联数组和索引数组)转成标准JSON字符串,直接传给 json_encode() 即可:
- 关联数组会转成JSON对象(
{}),例如['name' => '张三', 'age' => 25]→{"name":"张三","age":25} - 索引数组会转成JSON数组(
[]),例如[1, 2, 3]→[1,2,3] - 中文默认会被转成Unicode(如
"\u5f20\u4e09"),加参数JSON_UNESCAPED_UNICODE可保留原文:json_encode($arr, JSON_UNESCAPED_UNICODE) - 如果数组含资源、闭包或不可序列化的对象,
json_encode会返回false,建议加判断:$json = json_encode($arr); if ($json === false) { echo json_last_error_msg(); }
JSON转数组(json_decode)
把JSON字符串还原为PHP变量,默认返回对象(stdClass),加第二个参数 true 才返回关联数组:
-
json_decode($json)→ 返回对象,访问用->name -
json_decode($json, true)→ 返回关联数组,访问用['name'] - 如果JSON格式错误(比如多逗号、单引号、缺引号),函数返回
null,可用json_last_error()查错 - 深层嵌套的JSON也能自动解析,比如
{"user":{"id":1,"tags":["php","json"]}},解码后可直接取$arr['user']['tags'][0]
常见注意事项
实际用时容易踩几个坑,提前注意能省不少调试时间:
立即学习“PHP免费学习笔记(深入)”;
- 确保源数组/JSON的编码是UTF-8,否则中文可能乱码;PHP文件本身也建议存为UTF-8无BOM格式
-
json_decode对浮点数精度有影响(如1.23456789可能变成1.2345678900000001),敏感场景需额外处理 - PHP 7.3+ 支持
JSON_THROW_ON_ERROR标志,让错误抛出异常而不是返回false或null:json_decode($json, true, 512, JSON_THROW_ON_ERROR) - 空值、布尔、数字在转换中会保持类型对应,但
null在JSON里就是null,不是字符串"null"
一个完整示例
把数组转JSON再转回来,验证一致性:
$arr = ['code' => 200, 'msg' => '成功', 'data' => ['id' => 123, 'tags' => ['php', 'json']]];
$json = json_encode($arr, JSON_UNESCAPED_UNICODE);
echo $json; // {"code":200,"msg":"成功","data":{"id":123,"tags":["php","json"]}}
$newArr = json_decode($json, true);
var_dump($newArr['data']['tags'][0]); // string(3) "php"
不复杂但容易忽略细节,关键就记牢两个函数名和常用参数。



















