如何用PHP实现JSON漂亮打印
我怎样才能做MySQL的JSON漂亮打印? 我在我的代码中使用了JSON_PRETTY_PRINT
,但它没有打印我期待的内容。 我目前的脚本是:
<?php
//open connection to mysql db
$connection = mysqli_connect("127.0.0.1","root","Kunal@7890","testdb") or die("Error " . mysqli_error($connection));
//fetch table rows from mysql db
$sql = "select id,title,profilepic,created_at,url from news";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
$rows = array();
while($r = mysqli_fetch_assoc($result)) {
$rows[] = $r;
print json_encode($rows, JSON_PRETTY_PRINT);
}
?>
对于这个脚本,我得到如下结果:
[ { "id": "1", "title": "test", "profilepic": "0", "created_at": "2016-09-05 12:11:17", "url": "0" } ][ { "id": "1", "title": "test", "profilepic": "0", "created_at": "2016-09-05 12:11:17", "url": "0" }, { "id": "2", "title": "JCECE", "profilepic": "http://results.jharkhandeducation.net/JCECEB/JCECEB-Logo.jpg", "created_at": "2016-09-16 10:14:55", "url": "https://jcece.co.in/" } ]
我希望我的结果可以先打印出表格名称,然后再打印列表,如下所示:
{
"news": [
{
"id": 36,
"name": "JCECE",
"image": null,
"status": " JCECE 2016 will be conducted on June 5, 2016 by JCECE Board, which is the exam conducting authority for the engineering entrance examination. JCECE 2016 will be conducted to offer admissions to undergraduate engineering courses at the participating institutes of JCECE 2016 in the state of Jharkhand. As of now, there are a total of 19 colleges (government+private) that will offer over 6000 B.E/B.Tech seats to aspiring candidates in Jharkhand.
Application Dates:16 Apr 2016 to 16 May 2016
Admit Card Date:11 May 2015
Exam Dates:05 Jun 2016
Result Date:01 Jul 2015 to 10 Jul 2015 ",
"profilePic": "http://results.jharkhandeducation.net/JCECEB/JCECEB-Logo.jpg",
"timeStamp": "1461323436930",
"url": "https://jcece.co.in/"
},
{
"id": 39,
"name": "THAPAR UNIVERSITY",
"image": null,
"status": "The details about the Thapar University B.Tech admission 2016 have been released. The admission will be held as per the JEE Main 2016 score but candidates will have to fill a separate application form for it. Interested candidates, who are also eligible, may access the link below to apply. The last date to submit the application form is 26 April 2016.
Last Date:26 Apr 2016",
"profilePic": "https://upload.wikimedia.org/wikipedia/commons/d/da/ThaparUniversityLogo.jpg",
"timeStamp": "1459595788930",
"url": "http://www.thapar.edu/"
},
]
json_encode($rows,JSON_PRETTY_PRINT);
用换行符返回美化的数据。 这对命令行输入很有帮助,但正如你发现在浏览器中看起来不那么漂亮。 浏览器将接受换行符作为源代码(因此,查看页面源代码确实会显示漂亮的JSON),但它们不用于在浏览器中格式化输出。 浏览器需要HTML。
理想情况下,您应该使用<pre>
标签来封装您的输出。 这将在源代码中以相同的方式在浏览器上表示它。
如果由于某种原因而不够用,您可能还会考虑用适当的<br>
标签替换换行符。 但是,这会放弃一些使用空格的格式。
<?php
$data = array(
'foo' => array(
'bar',
'baz'
)
);
$jsonData = json_encode($data, JSON_PRETTY_PRINT);
echo "<h1>Original</h1>";
echo $jsonData;
echo "<h1><pre></h1><br>";
echo "<pre>" . $jsonData . "</pre>";
echo "<h1>str_replace()</h1><br>";
echo str_replace("n", "<br>", $jsonData);
?>
一个古老的问题,所以我假设你现在可能已经知道了这一点,但这常常出现在人们无法获得他们期望的json_encode
输出的问题中,所以对于未来的读者来说,有两个问题你需要做的主要事情来解决这个问题:
1.格式实际上就在那里,你只是在浏览器中看不到它。
JSON_PRETTY_PRINT
添加的所有新行和缩进通常不会显示在您的浏览器中,但是如果您查看页面源,它们将会在那里。 除非另有说明,否则您的PHP输出可能会以Content-Type:text/html
标题发送到浏览器,因此浏览器会将该页面解释为HTML文档,这意味着它将折叠所有的空白区域新的行和缩进)在JSON到单个空间,这就是为什么你只在屏幕上看到一行。
如果脚本的整个输出是JSON,则可以在顶部添加一个标题来指定该标题,以便浏览器知道它不是HTML。
header('Content-type: Application/JSON');
如果您想要显示一些JSON以及其他HTML内容,则可以按照其他答案中的建议使用<pre>
标记。
echo '<pre>'. json_encode($people, JSON_PRETTY_PRINT) . '</pre>';
2.在取出所有行之前不要进行编码。
这是问题的另一部分:
while($r = mysqli_fetch_assoc($result)) {
$rows[] = $r;
print json_encode($rows, JSON_PRETTY_PRINT);
}
如果您想要以JSON格式输出查询结果,则必须等到您提取所有结果之后再对其进行编码。
使用上面的代码,您可以获取一行,将其附加到数组,然后立即为查询结果中的每一行打印整个JSON编码的数组。 代之以做。
while($r = mysqli_fetch_assoc($result)) {
$rows[] = $r; // add rows to array
}
print json_encode($rows, JSON_PRETTY_PRINT); // encode and print full array
1 - json_encode($rows,JSON_PRETTY_PRINT);
用换行符返回美化的数据。 这对命令行输入很有帮助,但正如你发现在浏览器中看起来不那么漂亮。 浏览器将接受换行符作为源代码(因此,查看页面源代码确实会显示漂亮的JSON),但它们不用于在浏览器中格式化输出。 浏览器需要HTML。
2 - 使用这个功能github
<?php
/**
* Formats a JSON string for pretty printing
*
* @param string $json The JSON to make pretty
* @param bool $html Insert nonbreaking spaces and <br />s for tabs and linebreaks
* @return string The prettified output
* @author Jay Roberts
*/
function _format_json($json, $html = false) {
$tabcount = 0;
$result = '';
$inquote = false;
$ignorenext = false;
if ($html) {
$tab = " ";
$newline = "<br/>";
} else {
$tab = "t";
$newline = "n";
}
for($i = 0; $i < strlen($json); $i++) {
$char = $json[$i];
if ($ignorenext) {
$result .= $char;
$ignorenext = false;
} else {
switch($char) {
case '{':
$tabcount++;
$result .= $char . $newline . str_repeat($tab, $tabcount);
break;
case '}':
$tabcount--;
$result = trim($result) . $newline . str_repeat($tab, $tabcount) . $char;
break;
case ',':
$result .= $char . $newline . str_repeat($tab, $tabcount);
break;
case '"':
$inquote = !$inquote;
$result .= $char;
break;
case '':
if ($inquote) $ignorenext = true;
$result .= $char;
break;
default:
$result .= $char;
}
}
}
return $result;
}
链接地址: http://www.djcxy.com/p/47277.html