为什么代码不是以Pretty Json格式打印?

时间:2017-03-17 15:38:46

标签: php json

这是我的代码:

<?php
$result = dns_get_record("php.net",DNS_ANY);

echo json_encode(array('data' => $result), JSON_PRETTY_PRINT);
?>

我正在尝试将输出打印成漂亮的json格式,但不明白为什么它不能打印漂亮的json。
这是我在每次尝试后得到的输出:

{ "data": [ { "host": "php.net", "class": "IN", "ttl": 30, "type": "MX", "pri": 0, "target": "php-smtp2.php.net" }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "TXT", "txt": "v=spf1 ip4:72.52.91.12 ip6:2a02:cb41::8 ip4:140.211.15.143 ?all", "entries": [ "v=spf1 ip4:72.52.91.12 ip6:2a02:cb41::8 ip4:140.211.15.143 ?all" ] }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "SOA", "mname": "ns1.php.net", "rname": "admin.easydns.com", "serial": 1484930803, "refresh": 16384, "retry": 2048, "expire": 1048576, "minimum-ttl": 2560 }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "AAAA", "ipv6": "2a02:cb41::7" }, { "host": "php.net", "class": "IN", "ttl": 49, "type": "A", "ip": "72.52.91.14" }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "NS", "target": "dns3.easydns.org" }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "NS", "target": "dns4.easydns.info" }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "NS", "target": "dns2.easydns.net" }, { "host": "php.net", "class": "IN", "ttl": 300, "type": "NS", "target": "dns1.easydns.com" } ] }  

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您只需要向json_encode()添加第二个参数并添加<pre>标记。像这样:

echo '<pre>';
echo json_encode($data, JSON_PRETTY_PRINT);
echo '</pre>';

答案 1 :(得分:1)

在输出JSON前添加此标题:

header('Content-type: Application/JSON');

如果您的脚本返回JSON,那么您应该使用此标头。一些期望JSON响应的应用程序实际上需要它。

它目前显示在一行,而不管JSON_PRETTY_PRINT选项,因为浏览器已收到Content-Type:text/html标题,因此它将该文本呈现为HTML文档,其中包含所有文档新行和缩进缩小为单个空格。如果您使用Content-type: Application/JSON标头,则浏览器应显示格式化的JSON,而无需使用<pre>标记。实际上,如果您使用这些标记,则您的脚本将不再返回有效的JSON。

JSON是一种数据交换格式。它比XML之类的其他数据交换格式更易于阅读,这很好,但其主要目的是在应用程序之间传递数据。我认为JSON_PRETTY_PRINT的主要好处是开发人员,因此他们可以在处理输出时更轻松地检查输出。我的建议通常是不使用它,因为如果你不需要查看输出它只会增加不必要的开销,如果 需要查看输出,你可以安装一种浏览器扩展,它格式化JSON甚至比JSON_PRETTY_PRINT更有用。

相关问题