
PHP json_encode() 怎么开启缩进格式
直接加 JSON_PRETTY_PRINT 标志位就行,这是最常用也最可靠的美化方式。它不是“开关”,而是一个选项常量,必须作为第二个参数传给 json_encode()。
- 不加这个标志,
json_encode()默认输出紧凑格式(一行无空格) - 加了之后会自动插入换行和 4 空格缩进,可读性明显提升
- 注意:不能和
JSON_UNESCAPED_UNICODE等其他标志用加号(+)拼接,要用按位或(|)
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
为什么 JSON_PRETTY_PRINT 有时没效果
常见原因是输出被中间层截断或重编码了——比如你用了框架的响应封装、启用了 gzip 压缩、或者在 CLI 下运行但终端宽度限制导致换行被忽略。
- 检查是否在
header()之前已输出内容(哪怕一个空格),会导致 HTTP 响应体异常,缩进可能丢失 - 某些调试工具(如 Postman 的“Pretty”视图)会自己格式化,掩盖了 PHP 实际输出;用 “Raw” 模式确认真实响应
- CLI 环境下,如果管道到
less或重定向到文件,缩进正常;但直接 echo 到窄终端可能折行混乱,这不是 PHP 问题
PHP 7.3+ 的 JSON_THROW_ON_ERROR 和美化能一起用吗
能,而且推荐组合使用。它不会干扰格式,只改变错误处理方式——出错时抛异常而不是返回 false。
- 以前要手动检查
json_encode()返回值是否为false,再调json_last_error_msg() - 现在加上
JSON_THROW_ON_ERROR,出错直接 throw,代码更干净 - 它和
JSON_PRETTY_PRINT完全正交,可以同时传入
try {
echo json_encode($data, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR);
} catch (Exception $e) {
// 处理编码失败,比如含不可序列化对象
}
美化 JSON 对性能和传输有影响吗
有,但通常可忽略。美化只是增加空白字符,不影响语义和解析逻辑。
立即学习“PHP免费学习笔记(深入)”;
- 体积增大:每级缩进加 4 字符,换行符额外占 1–2 字节,对小数据几乎无感,万级字段以上才可能多几 KB
- 服务端 CPU 开销极低,现代 PHP 几乎测不出差异
- 生产环境一般关掉美化(尤其 API 接口),开发/调试/日志场景开它更省事
- 别试图用美化 JSON 做前端展示——该交给浏览器 DevTools 或专用 JSON 查看器
json_encode() 不带标志就是最小化输出,想好看就得显式加 JSON_PRETTY_PRINT。











