{"id":1933,"date":"2017-03-23T19:48:05","date_gmt":"2017-03-23T14:18:05","guid":{"rendered":"https:\/\/www.wikitechy.com\/technology\/?p=1933"},"modified":"2017-03-28T17:25:10","modified_gmt":"2017-03-28T11:55:10","slug":"pretty-printing-json-php","status":"publish","type":"post","link":"https:\/\/www.wikitechy.com\/technology\/pretty-printing-json-php\/","title":{"rendered":"[ Solved &#8211; 7 Answers ] PHP &#8211; Pretty-Printing JSON with PHP"},"content":{"rendered":"<p><label class=\"label label-Warning\">PROBLEM :<\/label><\/p>\n<p>We build a PHP script that feeds JSON data to another script. \u00a0ur script builds data into a large associative array, and then outputs the data using json_encode.<\/p>\n<h4 id=\"here-is-an-example-script\"><strong><span style=\"color: #ff6600;\">Here is an example script:<\/span><\/strong><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">$data = array(&#039;a&#039; =&gt; &#039;apple&#039;, &#039;b&#039; =&gt; &#039;banana&#039;, &#039;c&#039; =&gt; &#039;catnip&#039;);<br\/>header(&#039;Content-type: text\/javascript&#039;);<br\/>echo json_encode($data);<\/code><\/pre> <\/div>\n<ul>\n<li>The above code yields the following output:<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">{&quot;a&quot;:&quot;apple&quot;,&quot;b&quot;:&quot;banana&quot;,&quot;c&quot;:&quot;catnip&quot;}<\/code><\/pre> <\/div>\n<ul>\n<li>This is great if you have a small amount of data, but I&#8217;d prefer something along these lines:<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">{<br\/>    &quot;a&quot;: &quot;apple&quot;,<br\/>    &quot;b&quot;: &quot;banana&quot;,<br\/>    &quot;c&quot;: &quot;catnip&quot;<br\/>}<\/code><\/pre> <\/div>\n<ul>\n<li>Is there a way to do this in PHP without an ugly hack? It seems like someone at Facebook figured it out.<\/li>\n<li>php json pretty-print<\/li>\n<\/ul>\n<p><label class=\"label label-info\">SOLUTION 1:<\/label><\/p>\n<p>PHP 5.4 offers the JSON_PRETTY_PRINT option for use with the json_encode() call.<\/p>\n<p>http:\/\/php.net\/manual\/en\/function.json-encode.php<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">&lt;?php<br\/>...<br\/>$json_string = json_encode($data, JSON_PRETTY_PRINT);<\/code><\/pre> <\/div>\n<p><label class=\"label label-info\">SOLUTION 2:<\/label><\/p>\n<p>This function will take JSON string and indent it very readable. It also should be convergent,<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">prettyPrint( $json ) === prettyPrint( prettyPrint( $json ) )<\/code><\/pre> <\/div>\n<p>Input<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">{&quot;key1&quot;:[1,2,3],&quot;key2&quot;:&quot;value&quot;}<\/code><\/pre> <\/div>\n<p>Output<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">{<br\/>    &quot;key1&quot;: [<br\/>        1,<br\/>        2,<br\/>        3<br\/>    ],<br\/>    &quot;key2&quot;: &quot;value&quot;<br\/>}<\/code><\/pre> <\/div>\n<h4 id=\"code\"><strong><span style=\"color: #ff6600;\">Code:<\/span><\/strong><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">function prettyPrint( $json )<br\/>{<br\/>    $result = &#039;&#039;;<br\/>    $level = 0;<br\/>    $in_quotes = false;<br\/>    $in_escape = false;<br\/>    $ends_line_level = NULL;<br\/>    $json_length = strlen( $json );<br\/><br\/>    for( $i = 0; $i &lt; $json_length; $i++ ) {<br\/>        $char = $json[$i];<br\/>        $new_line_level = NULL;<br\/>        $post = &quot;&quot;;<br\/>        if( $ends_line_level !== NULL ) {<br\/>            $new_line_level = $ends_line_level;<br\/>            $ends_line_level = NULL;<br\/>        }<br\/>        if ( $in_escape ) {<br\/>            $in_escape = false;<br\/>        } else if( $char === &#039;&quot;&#039; ) {<br\/>            $in_quotes = !$in_quotes;<br\/>        } else if( ! $in_quotes ) {<\/code><\/pre> <\/div>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">switch( $char ) {<br\/>                case &#039;}&#039;: case &#039;]&#039;:<br\/>                    $level--;<br\/>                    $ends_line_level = NULL;<br\/>                    $new_line_level = $level;<br\/>                    break;<br\/><br\/>                case &#039;{&#039;: case &#039;[&#039;:<br\/>                    $level++;<br\/>                case &#039;,&#039;:<br\/>                    $ends_line_level = $level;<br\/>                    break;<br\/><br\/>                case &#039;:&#039;:<br\/>                    $post = &quot; &quot;;<br\/>                    break;<br\/><br\/>                case &quot; &quot;: case &quot;\\t&quot;: case &quot;\\n&quot;: case &quot;\\r&quot;:<br\/>                    $char = &quot;&quot;;<br\/>                    $ends_line_level = $new_line_level;<br\/>                    $new_line_level = NULL;<br\/>                    break;<br\/>            }<br\/>        } else if ( $char === &#039;\\\\&#039; ) {<br\/>            $in_escape = true;<\/code><\/pre> <\/div>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\"> }<br\/>        if( $new_line_level !== NULL ) {<br\/>            $result .= &quot;\\n&quot;.str_repeat( &quot;\\t&quot;, $new_line_level );<br\/>        }<br\/>        $result .= $char.$post;<br\/>    }<br\/><br\/>    return $result;<br\/>}<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<p><label class=\"label label-info\">SOLUTION 3:<\/label><\/p>\n<h4 id=\"we-just-used-the-json-formatting-code-here\"><strong><span style=\"color: #808000;\">We just used the json formatting code here:<\/span><\/strong><\/h4>\n<p>http:\/\/recursive-design.com\/blog\/2008\/03\/11\/format-json-with-php\/<\/p>\n<p><label class=\"label label-info\">SOLUTION 4:<\/label><\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">echo json_encode($results, JSON_PRETTY_PRINT);<\/code><\/pre> <\/div>\n<p>Which is absolutely right. But it&#8217;s not enough, the browser needs to understand the type of data, you can specify the header just before echo-ing the data back to the user.<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">header(&#039;Content-Type: application\/json&#039;);<\/code><\/pre> <\/div>\n<ul>\n<li>This will result in a well formatted output.<\/li>\n<li>Or, if you like extensions you can use JSONView for Chrome.<\/li>\n<\/ul>\n<p><label class=\"label label-info\">SOLUTION 5:<\/label><\/p>\n<h4 id=\"simple-way-for-php5-4\"><strong><span style=\"color: #800080;\">Simple way for php&gt;5.4:<\/span><\/strong><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">$Data = array(&#039;a&#039; =&gt; &#039;apple&#039;, &#039;b&#039; =&gt; &#039;banana&#039;, &#039;c&#039; =&gt; &#039;catnip&#039;);<br\/>$json= json_encode($Data, JSON_PRETTY_PRINT);<br\/>header(&#039;Content-Type: application\/json&#039;);<br\/>print_r($json);<\/code><\/pre> <\/div>\n<p>Result in browser<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">{<br\/>    &quot;a&quot;: &quot;apple&quot;,<br\/>    &quot;b&quot;: &quot;banana&quot;,<br\/>    &quot;c&quot;: &quot;catnip&quot;<br\/>}<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<p><label class=\"label label-info\">SOLUTION 6:<\/label><\/p>\n<p>How to encode an associative array to a pretty-formatted JSON string, so this doesn&#8217;t directly answer the question, but if you have a string that is already in JSON format, you can make it pretty simply by decoding and re-encoding it (requires PHP &gt;= 5.4):<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">$json = json_encode(json_decode($json), JSON_PRETTY_PRINT);<\/code><\/pre> <\/div>\n<h4 id=\"example\"><span style=\"color: #000000;\">Example:<\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">$json_ugly = &#039;{&quot;a&quot;:1,&quot;b&quot;:2,&quot;c&quot;:3,&quot;d&quot;:4,&quot;e&quot;:5}&#039;;<br\/>$json_pretty = json_encode(json_decode($json_ugly), JSON_PRETTY_PRINT);<br\/>echo $json_pretty;<\/code><\/pre> <\/div>\n<h4 id=\"this-outputs\"><span style=\"color: #ff6600;\"><strong>This outputs:<\/strong><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">{<br\/>    &quot;a&quot;: 1,<br\/>    &quot;b&quot;: 2,<br\/>    &quot;c&quot;: 3,<br\/>    &quot;d&quot;: 4,<br\/>    &quot;e&quot;: 5<br\/>}<\/code><\/pre> <\/div>\n<p><label class=\"label label-info\">SOLUTION 7:<\/label><\/p>\n<h4 id=\"use-pre-in-combination-with-json_encode-and-the-json_pretty_print-option\"><span style=\"color: #000000;\">Use &lt;pre&gt; in combination with json_encode() and the JSON_PRETTY_PRINT option:<\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Php Code<\/span> <\/div> <pre class=\"language-php code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-php code-embed-code\">&lt;pre&gt;<br\/>    &lt;?php<br\/>    echo json_encode($dataArray, JSON_PRETTY_PRINT);<br\/>    ?&gt;<br\/>&lt;\/pre&gt;<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n","protected":false},"excerpt":{"rendered":"<p>PROBLEM : We build a PHP script that feeds JSON data to another script. \u00a0ur script builds data into a large associative array, and then outputs the data using json_encode. Here is an example script: The above code yields the following output: This is great if you have a small amount of data, but I&#8217;d [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[4180,4173,4172,4178,4174,4179,4176,4175,4177,3885],"class_list":["post-1933","post","type-post","status-publish","format-standard","hentry","category-php","tag-alternative-layout-for-pretty-printed-json-string-structure","tag-can-comments-be-used-in-json","tag-how-can-i-pretty-format-my-json-output-in-ruby-on-rails","tag-how-can-i-pretty-print-json-using-javascript","tag-how-can-i-pretty-print-json","tag-how-to-log-pretty-printed-json-in-php","tag-is-there-a-pretty-print-for-php","tag-pretty-printing-xml-in-python","tag-pretty-print-json-in-java","tag-what-is-the-correct-json-content-type"],"_links":{"self":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/1933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/comments?post=1933"}],"version-history":[{"count":0,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/1933\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/media?parent=1933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/categories?post=1933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/tags?post=1933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}