php中json格式化输出需用json_encode($data, json_pretty_print | json_unescaped_unicode),并设置header('content-type: application/json; charset=utf-8'),注意避免中文乱码、空白字符干扰及不可序列化类型。

PHP 中 JSON 格式化输出主要靠 json_encode() 的第二个参数传入 JSON_PRETTY_PRINT 常量,让生成的 JSON 字符串带缩进和换行,便于阅读和调试。
基础格式化写法
最常用、最直接的方式:
- 使用
JSON_PRETTY_PRINT标志开启美化输出 - 确保数据本身合法(如不包含资源、闭包等不可序列化类型)
- 推荐同时加
JSON_UNESCAPED_UNICODE,避免中文被转成 \uXXXX
示例代码:
$data = ['name' => '张三', 'scores' => [85, 92, 78]]; echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
输出效果:
{
"name": "张三",
"scores": [
85,
92,
78
]
}
配合 HTTP 响应头输出 JSON
在 Web 接口开发中,不仅要格式化内容,还要设置正确的响应头:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 用
header('Content-Type: application/json; charset=utf-8')告诉浏览器这是 JSON 数据 - 避免因编码或 header 冲突导致前端解析失败
- 开发环境可加
JSON_UNESCAPED_SLASHES防止 URL 中的斜杠被转义
完整示例:
header('Content-Type: application/json; charset=utf-8');
$data = ['status' => 'success', 'msg' => '操作完成', 'time' => date('Y-m-d H:i:s')];
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
调试时自动判断是否格式化
生产环境通常关闭格式化(节省带宽),开发环境开启。可用常量或配置控制:
- 通过
defined('DEBUG') && DEBUG判断环境 - 或读取
$_SERVER['APP_ENV']等环境变量 - 封装一个安全的输出函数,自动处理错误(比如 json_last_error())
简易封装参考:
function outputJson($data, $pretty = false) {
$options = JSON_UNESCAPED_UNICODE;
if ($pretty || (defined('DEBUG') && DEBUG)) {
$options |= JSON_PRETTY_PRINT;
}
header('Content-Type: application/json; charset=utf-8');
$json = json_encode($data, $options);
if ($json === false) {
http_response_code(500);
echo json_encode(['error' => 'JSON encode failed: ' . json_last_error_msg()]);
return;
}
echo $json;
}
注意点和常见坑
格式化虽简单,但容易忽略细节:
-
中文乱码:没加
JSON_UNESCAPED_UNICODE会导致中文变成 \uXXXX,前端显示为方块或乱码 -
空格/换行干扰:如果在
json_encode()前有echo、print或空白字符,会导致 JSON 解析失败 -
资源类型报错:数组里不小心塞了 MySQLi 对象、文件句柄等,
json_encode会静默返回false -
浮点数精度:如需精确控制小数位数,不能依赖
json_encode,要先用round()或number_format()处理数值字段
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










