How To Pretty-Print JSON In PHP?

Published October 15, 2024

Problem: Formatting JSON in PHP

JSON data can be hard to read when it's not formatted well. In PHP, working with raw JSON strings often results in compact, unstructured output that's hard to understand and debug. Pretty-printing JSON helps make the data more readable and easier to work with.

Solution: Using JSON_PRETTY_PRINT Option

Implementing JSON_PRETTY_PRINT in PHP

PHP 5.4 and later versions have a built-in solution for pretty-printing JSON: the JSON_PRETTY_PRINT option. You can use this option with the json_encode() function to create formatted, readable JSON output.

To use JSON_PRETTY_PRINT with json_encode(), pass it as a second argument to the function:

$data = array('a' => 'apple', 'b' => 'banana', 'c' => 'catnip');
$json_string = json_encode($data, JSON_PRETTY_PRINT);

This will produce the following output:

{
    "a": "apple",
    "b": "banana",
    "c": "catnip"
}

The JSON_PRETTY_PRINT option adds spaces and line breaks to the JSON output, making it easier to read. This is useful when working with large or complex JSON structures.

When using this option, set the right content type header if you're sending the JSON to a browser:

header('Content-Type: application/json');
echo json_encode($data, JSON_PRETTY_PRINT);

By using JSON_PRETTY_PRINT, you can create readable JSON output in PHP without using custom formatting functions or external libraries.

Tip: Combining JSON_PRETTY_PRINT with Other Options

You can combine JSON_PRETTY_PRINT with other JSON encoding options using the bitwise OR operator (|). For example, to use JSON_PRETTY_PRINT along with JSON_UNESCAPED_UNICODE:

$data = array('greeting' => 'Hello, 世界!');
$json_string = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

This will produce:

{
    "greeting": "Hello, 世界!"
}