[英]Why the code is not printing in Pretty Json format?
这是我的代码:
<?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" } ] }
请帮助我。
您只需要json_encode()
添加一个参数并添加<pre>
标签即可。 像这样:
echo '<pre>';
echo json_encode($data, JSON_PRETTY_PRINT);
echo '</pre>';
在输出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
有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.