151

Possible Duplicate:
Pretty-Printing JSON with PHP

I'm working on a script that creates a JSON file. Right now I'm just using json_encode (PHP 5.2.x) to encode an array into JSON output. Then I print the returned value to a file and save it. Problem is that the client wants to be able to open these JSON files for readability, so I'd like to add line breaks in and "pretty print" the JSON output. Any ideas on how to do this? My only other alternative that I can see is to not use json_encode at all and just write the file contents manually and add in my own line breaks for each line.

Here's what I get:

{"product_name":"prod1","val1":1,"val2":8}

Here's what I want:

{
  "product_name":"prod1",
  "val1":1,
  "val2":8
}

I suppose I could also just replace every comma with a command followed by a \n, and same for the brackets... Thoughts?

1

2 Answers 2

357

PHP has JSON_PRETTY_PRINT option since 5.4.0 (release date 01-Mar-2012).

This should do the job:

$json = json_decode($string);
echo json_encode($json, JSON_PRETTY_PRINT);

See http://www.php.net/manual/en/function.json-encode.php

Note: Don't forget to echo "<pre>" before and "</pre>" after, if you're printing it in HTML to preserve formatting ;)

Sign up to request clarification or add additional context in comments.

2 Comments

In PHP <5.4 replace JSON_PRETTY_PRINT with 128
Instead of using "<pre>" tags (which will render your JSON invalid), you ought to use header("Content-Type: application/json") and then your browser will render it as plain text rather than markup.
10

Hmmm $array = json_decode($json, true); will make your string an array which is easy to print nicely with print_r($array, true);

2 Comments

@Michael Mior you should see my debugging die die(print('<pre>'.print_r($var, true).'</pre>')) it prints almost anything :p
I usually just view the source and go with var_dump, but whatever works :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.