引言:为什么“脏”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什么是 JSON 美化打印?
\n\nPretty-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。这是一个基本示例:
<?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您可以通过 |(按位或)传递多个标志。例如,同时格式化和转义 Unicode 字符:
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);\necho $json;\n\nJSON_UNESCAPED_UNICODE 标志以可读形式保留西里尔字母和其他字符,而不是以 \\u0438\\u0432\\u0430\\u043d 的形式显示。这对于俄语网站尤其有用。
如何在浏览器中显示美化打印的 JSON
\n\n如果您正在开发 API,并希望 JSON 直接在浏览器中美观显示(例如,在调试时),请将 Content-Type: application/json 标头与格式化一起使用:
<?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