json_encode 是 PHP 将数组、对象等转为 JSON 字符串的函数,需确保 UTF-8 编码,支持 JSON_UNESCAPED_UNICODE 显示中文、JSON_PRETTY_PRINT 格式化输出,失败返回 false,推荐结合 JSON_THROW_ON_ERROR 使用。

json_encode 是 PHP 里把数组、对象等变量转成标准 JSON 字符串的核心函数,用对了很稳,用错了容易返回 false 或乱码。
基础用法:传入值,得到字符串
最简单的调用就是只传一个参数:
- 支持数组、对象、标量(数字、字符串、布尔、null)
- 不支持 resource 类型(比如文件句柄、数据库连接)
- 所有字符串必须是 UTF-8 编码,否则可能返回空或 `false`
示例:
$data = ['name' => '张三', 'age' => 28, 'hobbies' => ['读书', '游泳']]; echo json_encode($data);
输出(紧凑格式):{"name":"张三","age":28,"hobbies":["读书","游泳"]}
立即学习“PHP免费学习笔记(深入)”;
中文不乱码:加 JSON_UNESCAPED_UNICODE
默认情况下,中文会被转成 \uXXXX 形式,比如 "\u5f20\u4e09"。要直接显示汉字,必须加这个 flag:
-
JSON_UNESCAPED_UNICODE(PHP 5.4+) - 它让 UTF-8 字符原样输出,不转义
示例:
echo json_encode($data, JSON_UNESCAPED_UNICODE);
输出:{"name":"张三","age":28,"hobbies":["读书","游泳"]}
格式化输出:方便调试用 JSON_PRETTY_PRINT
默认是一行密文,难读。加这个选项可自动缩进换行:
-
JSON_PRETTY_PRINT(PHP 5.4+) - 可和其他 flag 组合使用,比如同时处理中文和美化
示例:
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
输出效果类似:
{
"name": "张三",
"age": 28,
"hobbies": [
"读书",
"游泳"
]
}错误处理:别忽略返回 false
`json_encode` 失败时返回 false,常见原因有:
- 含非 UTF-8 字符串(如 GBK 编码的中文)
- 存在循环引用的对象
- 数据嵌套太深(超出默认 depth=512)
- 含不可序列化的类型(如 resource、闭包)
建议加判断:
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
if ($json === false) {
$error = json_last_error_msg();
error_log("JSON 编码失败: $error");
// 或 throw new Exception("JSON 编码失败: $error");
}进阶技巧:常用组合 flag
多个选项用按位或 | 连接:
-
JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT:中文 + 美化 -
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES:中文 + 不转义斜杠(如 URL 字段) -
JSON_THROW_ON_ERROR(PHP 7.3+):出错直接抛异常,不用手动查json_last_error() -
JSON_FORCE_OBJECT:空数组也转成 {} 而不是 [],适合要求对象结构的接口
示例(PHP 7.3+ 推荐):
try {
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
} catch (Exception $e) {
// 处理编码异常
}不复杂但容易忽略。



















