在PHP开发中,将数组转换为JSON字符串是非常常见的操作,不管是接口数据返回还是前后端数据交互都会用到这个能力,PHP本身提供了内置函数可以直接实现这个需求。

核心转换函数json_encode
PHP中把数组组成JSON字符串最核心的函数是json_encode,这个函数可以把PHP的数组、对象等数据类型转换为对应的JSON格式字符串,基本用法非常简单。
普通索引数组转换为JSON字符串的示例代码如下:
<?php // 定义一个普通索引数组 $indexArray = ['苹果', '香蕉', '橘子']; // 使用json_encode转换为JSON字符串 $jsonStr = json_encode($indexArray); // 输出结果 echo $jsonStr; ?>
上述代码执行后会输出["苹果","香蕉","橘子"],可以看到索引数组会被转换为JSON数组格式。
关联数组的转换结果
如果是关联数组,转换后的JSON字符串会是对象格式,键值对会对应JSON对象的属性和值,示例如下:
<?php
// 定义一个关联数组
$assocArray = [
'name' => '张三',
'age' => 25,
'city' => '北京'
];
// 转换为JSON字符串
$jsonStr = json_encode($assocArray);
echo $jsonStr;
?>
执行后会输出{"name":"张三","age":25,"city":"北京"},关联数组的键会成为JSON对象的属性名。
处理中文转义问题
默认情况下json_encode会把中文转换为Unicode编码,比如上面的中文会显示为u5f20u4e09这样的格式,如果不需要转义中文,可以添加JSON_UNESCAPED_UNICODE参数:
<?php
$assocArray = [
'name' => '张三',
'age' => 25
];
// 添加JSON_UNESCAPED_UNICODE参数保留中文
$jsonStr = json_encode($assocArray, JSON_UNESCAPED_UNICODE);
echo $jsonStr;
?>
此时输出结果就是{"name":"张三","age":25},中文不会被转义。
转换失败的排查方法
如果数组中包含不支持的数据类型,比如资源类型,json_encode会返回false,可以通过json_last_error函数查看错误原因:
<?php
// 定义一个包含资源类型的数组,资源类型无法被转换为JSON
$array = ['file' => fopen('test.txt', 'r')];
$jsonStr = json_encode($array);
if ($jsonStr === false) {
// 获取最后一次JSON转换的错误码
$errorCode = json_last_error();
echo 'JSON转换失败,错误码:' . $errorCode;
}
?>
常见的错误码包括JSON_ERROR_DEPTH表示数组层级过深,JSON_ERROR_UTF8表示数组中存在非UTF8编码的字符,排查时可以根据错误码调整数组内容。
常用参数补充说明
除了JSON_UNESCAPED_UNICODE之外,json_encode还支持其他常用参数:
JSON_PRETTY_PRINT:让生成的JSON字符串有缩进格式,方便阅读JSON_UNESCAPED_SLASHES:不转义斜杠,默认斜杠会被转义为/
多个参数可以同时使用,用按位或运算符连接即可:
<?php $array = ['url' => 'https://ipipp.com/test', 'name' => '测试']; // 同时使用多个参数 $jsonStr = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); echo $jsonStr; ?>
上述代码输出的JSON字符串会有缩进,中文和斜杠都不会被转义,更适合调试场景使用。
PHPJSON数组json_encode修改时间:2026-06-17 13:03:28