PHP 格式化输出 JSON:一个适合浏览器查看的轻量方法

咖啡半糖
咖啡半糖
发布时间:2026-08-25| 158人浏览过
原创

前言

开发 PHP 接口或排查数据结构时,最常见的问题不是能不能输出 JSON,而是输出后难不难读。本文围绕一个适用于 PHP 5.4 及以上版本的轻量方法展开,拆开说明响应头、格式化选项和两种返回方式各自解决什么问题,帮助你判断它适合临时调试还是继续封装进项目。

开发接口、调试数组或查看对象内容时,直接输出一行压缩 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 或更高:

用纸张卡片和箭头展示 ddj 方法的内部流程:设置 JSON 响应头、json_encode 选项、输出或返回两种结果
ddj 方法做了哪几步一张流程拆解图,把这个小函数实际做的三件事说清楚。
/**
 * 浏览器友好的变量输出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 选项分别解决了什么问题

真正影响阅读体验的是这一行:

用对比卡片展示两个 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 框架里的统一响应规范。

因此,更准确的定位是:这是一个面向开发调试的实用小函数,胜在够短、够直接、够容易复用。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。