如何在 PHP 中美化输出 JSON:新手完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么“脏”JSON 是任何开发者的敌人

\n\n

想象一下:您用 PHP 编写了一个 API,以 JSON 格式返回数据,然后在浏览器或控制台中打开结果——您看到的是一行没有空格的连续字符串:

\n\n
{"users":[{"id":1,"name":"伊万","email":"ivan@example.com"},{"id":2,"name":"玛丽亚","email":"maria@example.com"}]}
\n\n

眼花缭乱,找不到需要的字段,如果 JSON 包含错误——您将花费数小时寻找。熟悉的情况吗?正因如此,在 Stack Overflow 上,问题 “Pretty-Printing JSON with PHP” 获得了数千次浏览。今天,我们将一劳永逸地弄清楚如何使用 PHP 让 JSON 可读、结构化且美观。

\n\n

在本文中,您将了解到:

\n
    \n
  • 什么是 pretty-printing 以及为什么需要它
  • \n
  • 如何使用内置函数 json_encode 及其标志
  • \n
  • 如何为调试、日志和浏览器输出格式化 JSON
  • \n
  • 额外技巧:递归格式化、处理 Unicode 和压缩
  • \n
\n\n

开始吧!

\n\n

什么是 JSON 美化打印?

\n\n

Pretty-printing(源自英文“漂亮打印”)是一种通过缩进、换行和对齐来格式化数据的方式,使人能够轻松阅读结构。对于 JSON 来说,这会将“混乱”转变为整洁的层次结构:

\n\n
{\n    "users": [\n        {\n            "id": 1,\n            "name": "伊万",\n            "email": "ivan@example.com"\n        },\n        {\n            "id": 2,\n            "name": "玛丽亚",\n            "email": "maria@example.com"\n        }\n    ]\n}
\n\n

您同意吗,这样工作起来愉快多了!PHP 为此提供了内置工具,无需安装额外的库。

\n\n

主要方法:使用 JSON_PRETTY_PRINT 标志的 json_encode

\n\n

最简单且最常用的方法是在 json_encode() 函数的第二个参数中传递常量 JSON_PRETTY_PRINT。这是一个基本示例:

\n\n
<?php\n$data = [\n    'name' => 'PythonLib',\n    'type' => 'educational',\n    'topics' => ['PHP', 'Python', 'JavaScript'],\n    'stats' => [\n        'visitors' => 15000,\n        'rating' => 4.8\n    ]\n];\n\n$prettyJson = json_encode($data, JSON_PRETTY_PRINT);\necho $prettyJson;\n?>
\n\n

结果:

\n\n
{\n    "name": "PythonLib",\n    "type": "educational",\n    "topics": [\n        "PHP",\n        "Python",\n        "JavaScript"\n    ],\n    "stats": {\n        "visitors": 15000,\n        "rating": 4.8\n    }\n}
\n\n

请注意:键按字母顺序排序。如果您需要保留原始顺序——请使用 JSON_PRESERVE_ZERO_FRACTION 标志(用于浮点数)或手动对数组进行排序。

\n\n

组合标志

\n\n

您可以通过 |(按位或)传递多个标志。例如,同时格式化和转义 Unicode 字符:

\n\n
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);\necho $json;
\n\n

JSON_UNESCAPED_UNICODE 标志以可读形式保留西里尔字母和其他字符,而不是以 \\u0438\\u0432\\u0430\\u043d 的形式显示。这对于俄语网站尤其有用。

\n\n

如何在浏览器中显示美化打印的 JSON

\n\n

如果您正在开发 API,并希望 JSON 直接在浏览器中美观显示(例如,在调试时),请将 Content-Type: application/json 标头与格式化一起使用:

\n\n
<?php\nheader('Content-Type: application/json; charset=utf-8');\n\n$response = [\n    'status' => 'success',\n    'data' => [\n        'message' => '你好,世界!',\n        'code' => 200\n    ]\n];\n\necho                

博客

书籍推荐