我正在构建一个PHP脚本,将JSON数据提供给另一个脚本 . 我的脚本将数据构建到一个大的关联数组中,然后使用 json_encode
输出数据 . 这是一个示例脚本:
$data = array('a' => 'apple', 'b' => 'banana', 'c' => 'catnip');
header('Content-type: text/javascript');
echo json_encode($data);
上面的代码产生以下输出:
{"a":"apple","b":"banana","c":"catnip"}
如果您有少量数据,这很好,但我更喜欢这些内容:
{
"a": "apple",
"b": "banana",
"c": "catnip"
}
有没有办法在没有丑陋黑客的情况下在PHP中执行此操作?好像有人在Facebook想出来了 .
22 回答
PHP 5.4提供了
JSON_PRETTY_PRINT
选项,用于json_encode()
调用 .http://php.net/manual/en/function.json-encode.php
这个函数将采用JSON字符串并缩进它非常易读 . 它也应该是收敛的,
输入
产量
码
很多用户建议你使用
哪个是绝对正确的 . 但这还不够,浏览器需要了解数据类型,您可以在将数据回送给用户之前指定 Headers .
这将导致格式良好的输出 .
或者,如果您喜欢扩展,则可以使用JSONView for Chrome .
我遇到过同样的问题 .
无论如何我只是在这里使用了json格式代码:
http://recursive-design.com/blog/2008/03/11/format-json-with-php/
适合我需要的东西 .
更维护的版本:https://github.com/GerHobbelt/nicejson-php
我意识到这个问题是关于如何将关联数组编码为漂亮格式的JSON字符串,所以这并没有直接回答这个问题,但是如果你有一个已经是JSON格式的字符串,你可以简单地说通过解码和重新编码(需要PHP> = 5.4):
示例:
这输出:
如果你在firefox上安装JSONovich . 我并不是真正的PHP解决方案,但它可以用于开发目的/调试 .
我从Composer中获取代码:https://github.com/composer/composer/blob/master/src/Composer/Json/JsonFile.php和nicejson:https://github.com/GerHobbelt/nicejson-php/blob/master/nicejson.php编译器代码很好,因为它从5.3到5.4流畅地更新,但它只编码对象,而nicejson采用json字符串,所以我合并了它们 . 该代码可用于格式化json字符串和/或编码对象,我目前正在Drupal模块中使用它 .
php> 5.4的简单方法:就像Facebook图形一样
结果在浏览器中
将
<pre>
与json_encode()
和JSON_PRETTY_PRINT
选项结合使用:如果您有现有的JSON(
$ugly_json
)1 -
json_encode($rows,JSON_PRETTY_PRINT);
返回带有换行符的美化数据 . 这对命令行输入很有帮助,但是当你在浏览器中看起来很漂亮时 . 浏览器将接受新行作为源(因此,查看页面源确实会显示漂亮的JSON),但它们不用于在浏览器中格式化输出 . 浏览器需要HTML .2 - 使用此功能github
您可以在switch语句中修改Kendall Hopkins的一些答案,通过将json字符串传递给以下内容来获得非常干净的外观和良好缩进的打印输出:
}
现在只需运行prettyPrint函数($ your_json_string);内联你的PHP并享受打印输出 . 如果由于某种原因你喜欢括号,你可以通过在$ char的前三个开关盒中用
$char="<br>";
替换$char.="<br>";
来轻松摆脱它们 . 以下是您为卡尔加里市进行Google Map API调用所获得的信息有颜色全输出:微小的解决方案
码:
你可以像下面这样做 .
以上会输出像Facebook一样 .
递归解决方案的经典案例 . 这是我的:
用法:
干杯
如果你只使用
$json_string = json_encode($data, JSON_PRETTY_PRINT);
,你会在浏览器中得到这样的东西(使用问题中的Facebook link :)):but 如果您使用了像JSONView这样的Chrome扩展(即使没有上面的PHP选项),那么您还可以获得更多 pretty readable debuggable solution ,您甚至可以轻松地折叠/折叠每个JSON对象:
print_r非常适合PHP打印
Example PHP
这个解决方案让'真的很漂亮'的JSON . 不完全是OP所要求的,但它可以让您更好地可视化JSON .
}
将几个答案粘在一起符合我的需要 existing json:
以下是对我有用的:
test.php的内容:
输出:
另请注意在html中使用“pre”标记 .
希望能帮助别人
如果您正在使用 MVC
尝试在你的控制器中这样做
那么如果你调用/ getLatestUsers,你将得到一个漂亮的JSON输出;)
我没有足够的声誉回复肯德尔霍普金斯,但我发现他的美化师有一个错误(它也出现了尴尬)
这条线应该修改:
至
当一个字符串以反斜杠结尾时,解码器会中断并产生无效的json: