开发接口、调试数组或查看对象内容时,直接输出一行压缩 JSON 往往不利于阅读,中文还可能出现转义字符。下面这段 PHP 方法针对的就是这个常见问题:在 PHP 5.4 或更高版本里,用较少代码得到适合浏览器查看的 JSON 输出,同时保留“直接打印”与“返回字符串”两种使用方式,方便你按场景判断是否要继续封装。
为什么要单独做一个 JSON 格式化输出方法
默认情况下,PHP 用 json_encode() 输出的数据通常是单行字符串。只要数组层级稍深,或者数据里包含较多中文、状态字段、嵌套对象,调试时就不容易快速定位问题。
这段方法做的事其实很明确:
- 把响应头设为
application/json;charset=utf8,让浏览器按 JSON 方式展示内容。 - 通过
JSON_UNESCAPED_UNICODE保留中文原样输出,避免看到大量\uXXXX。 - 通过
JSON_PRETTY_PRINT增加缩进和换行,让 JSON 结构更容易阅读。 - 通过
$echo参数区分“立即输出”和“作为字符串返回”。
如果你的用途是接口调试、浏览器直接查看返回值,或者临时排查数据结构,这种轻量写法已经足够实用。
可直接使用的 ddj 方法
原方法如下,适用前提是 PHP 版本要求 5.4 或更高:

/**
* 浏览器友好的变量输出json格式
* @param mixed $var 变量
* @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串
* @return void|string
* @author TechLee
*/
function ddj($var, $echo = true)
{
header('content-type:application/json;charset=utf8');
$output = json_encode($var, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
if ($echo) {
echo ($output);
return;
} else {
return $output;
}
}
这个函数本身并不复杂,但几个关键点值得单独看清。
版本要求为什么是 PHP 5.4+
这里的版本门槛来自两个常量:JSON_UNESCAPED_UNICODE 和 JSON_PRETTY_PRINT。它们在较早版本里并不完整可用,因此原文强调 PHP 版本要求 5.4 或更高,这一点需要保留,不能忽略。
如果项目环境低于这个版本,这段代码就不能按原样使用。
输出头和浏览器展示有什么关系
header('content-type:application/json;charset=utf8'); 的作用,是告诉浏览器当前输出内容是 JSON,并使用 utf8 字符集。这样在浏览器里直接访问脚本时,内容会以更明确的 JSON 响应形式呈现,而不是被当成普通 HTML 文本处理。
不过也要注意,这意味着它更适合接口输出或调试输出场景。如果你的页面已经开始输出 HTML,或者当前请求并不应该返回 JSON,再调用这个函数就要谨慎一些。
两个 JSON 选项分别解决了什么问题
真正影响阅读体验的是这一行:

$output = json_encode($var, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
JSON_UNESCAPED_UNICODE:避免中文被转义
不加这个选项时,中文通常会被编码成 \u 开头的 Unicode 转义序列。数据本身没有错,但调试时可读性会明显下降。
加上 JSON_UNESCAPED_UNICODE 后,中文会以原字符形式输出,更适合人工查看。
JSON_PRETTY_PRINT:让结构有缩进和换行
这个选项负责把原本压缩在一行的 JSON 按层级展开。对于多层数组、对象或接口返回结果,它能明显降低阅读成本,特别适合在浏览器、接口测试环境或日志排查时快速扫描字段结构。
也就是说,这段方法的核心并不是“输出 JSON”,而是“把 JSON 输出得更适合人读”。
什么时候直接输出,什么时候返回字符串
函数的第二个参数是 $echo,默认值为 true。这让它有两种使用方式。
默认模式:直接输出
当 $echo 为 true 时,函数会执行:
echo ($output);
return;
这种方式适合你就是想把结果立刻返回给浏览器,例如调试接口响应、临时查看数组内容,或者输出一个纯 JSON 页面。
需要进一步处理时:返回字符串
如果把 $echo 设为 false,函数会返回格式化后的 JSON 字符串:
return $output;
这时你可以把结果继续写入日志、拼接到其他输出逻辑里,或者交给别的函数处理,而不是当场打印出来。
这种设计虽然简单,但实用性不错,比只会 echo 的调试函数更灵活。
适用场景与使用边界
如果你的目标只是做一个顺手的 JSON 调试工具,这个方法已经能解决大多数基础需求,尤其适合下面几类场景:
- 调试数组、对象或接口返回数据。
- 在浏览器里临时查看 PHP 脚本输出。
- 希望中文保持原样、JSON 结构带缩进。
- 同一个方法既支持直接输出,也支持返回字符串。
但它也有明显边界:
- 函数内固定发送了
content-type:application/json;charset=utf8,并不适合混合 HTML 页面随意调用。 - 代码没有处理
json_encode()失败时的错误信息,适合轻量调试,不是完整的生产级 JSON 响应封装。 - 它强调的是“格式化查看”,不是 API 框架里的统一响应规范。
因此,更准确的定位是:这是一个面向开发调试的实用小函数,胜在够短、够直接、够容易复用。













