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?

Community
  • 1
  • 1
Brian
  • 7,204
  • 12
  • 51
  • 84
  • 1
    See [this comment in the manual](http://www.php.net/manual/en/function.json-encode.php#80339). – netcoder Aug 17 '11 at 18:13
  • $jsonArr = '{"product_name":"prod1","val1":1,"val2":8}'; $jsonArr = json_decode($jsonArr); echo "
    ";print_R($jsonArr);
    – Elangovan May 29 '15 at 09:27

3 Answers3

354

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 ;)

petrkotek
  • 4,541
  • 1
  • 18
  • 15
  • 15
    In PHP <5.4 replace `JSON_PRETTY_PRINT` with 128 – Nic Cottrell Aug 19 '14 at 13:36
  • 2
    @NicCottrell doesn't work when i test it here http://sandbox.onlinephpfunctions.com/code/99ef7015efd0e31a06bd3d0d1130f7b9ace9e7a4 – drzaus Aug 28 '14 at 05:15
  • @drzaus works for me there - I can see each key of JSON on separate line (the PHP version used on that site has even JSON_PRETTY_PRINT defined. – petrkotek Aug 28 '14 at 06:07
  • @beret ahh, I thought sharing it would retain the PHP setting -- change the php version to anything less than 5.4 and it should go back to "unformatted" – drzaus Aug 28 '14 at 13:29
  • @drzaus Oh I see. I didn't look for the switch of PHP version. Yeah, apparently not only the constant has been added, but mainly the functionality. Makes sense. – petrkotek Aug 28 '14 at 14:10
  • Instead of using "
    " 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.
    – Octopus Mar 14 '17 at 18:11
11

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

But if you really want to prettify your json... Check this out

sg3s
  • 9,411
  • 3
  • 36
  • 52
4

Here's a function to pretty up your json: pretty_json

Cam Tullos
  • 2,537
  • 1
  • 21
  • 18
  • 1
    Just wondering how `brew install php54` is considered a lot of work. When doing development on a Mac, it's fairly likely you have homebrew installed... – kander Apr 26 '16 at 14:12