Try it yourself with our free Json Formatter tool — runs entirely in your browser, no signup needed.

How to Format JSON in PHP

How to format JSON in PHP

Formatting JSON data in PHP is an essential task, particularly when working with APIs, data exchange, or debugging. Properly formatted JSON can significantly improve readability, making it easier to understand and work with the data. In this guide, we will explore how to format JSON in PHP, covering the basics, common edge cases, and performance tips.

Quick Example

Here is a minimal example that formats JSON data in PHP:

$jsonData = '{"name":"John","age":30,"city":"New York"}';
$formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);
echo $formattedJson;

This code takes a JSON string, decodes it into a PHP array, and then encodes it back into a formatted JSON string using the json_encode function with the JSON_PRETTY_PRINT option.

Step-by-Step Breakdown

Let's break down the code:

  • $jsonData = '{"name":"John","age":30,"city":"New York"}';: This line assigns a JSON string to the $jsonData variable.
  • json_decode($jsonData, true): This function decodes the JSON string into a PHP array. The second argument true tells json_decode to return an associative array instead of an object.
  • json_encode(..., JSON_PRETTY_PRINT): This function encodes the PHP array back into a JSON string. The JSON_PRETTY_PRINT option formats the JSON with indentation and line breaks, making it human-readable.
  • echo $formattedJson;: Finally, the formatted JSON is output using echo.

Handling Edge Cases

Empty/Null Input

When dealing with empty or null input, it's essential to handle these cases to avoid errors. Here's an example:

$jsonData = null;
if ($jsonData !== null) {
    $formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);
    echo $formattedJson;
} else {
    echo "Input is empty or null.";
}

Invalid Input

If the input is not a valid JSON string, json_decode will return null. You can handle this case using the following code:

$jsonData = '{"name":"John","age":30,"city":"New York"';
if (json_decode($jsonData, true) !== null) {
    $formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);
    echo $formattedJson;
} else {
    echo "Invalid JSON input.";
}

Large Input

When working with large JSON inputs, it's crucial to consider performance. One approach is to use a streaming JSON parser, such as JsonStreamingParser from the json-streaming package. Here's an example:

use JsonStreamingParser\Parser;

$jsonData = '{"name":"John","age":30,"city":"New York"}';
$parser = new Parser();
$parser->parse($jsonData);
$formattedJson = $parser->getJson();
echo $formattedJson;

To install the json-streaming package, run the following command:

composer require json-streaming/json-streaming

Unicode/Special Characters

When working with JSON data containing Unicode or special characters, ensure that your PHP script uses the correct encoding. Here's an example:

header('Content-Type: application/json; charset=utf-8');
$jsonData = '{"name":"John","age":30,"city":"New York"}';
$formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $formattedJson;

In this example, the JSON_UNESCAPED_UNICODE option tells json_encode to output Unicode characters without escaping them.

Common Mistakes

1. Forgetting to Specify the JSON_PRETTY_PRINT Option

Without the JSON_PRETTY_PRINT option, the formatted JSON will not be indented or formatted with line breaks.

Wrong Code:

$formattedJson = json_encode(json_decode($jsonData, true));

Corrected Code:

$formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);

2. Not Handling Empty or Null Input

Failing to handle empty or null input can lead to errors or unexpected behavior.

Wrong Code:

$formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);

Corrected Code:

if ($jsonData !== null) {
    $formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);
    echo $formattedJson;
} else {
    echo "Input is empty or null.";
}

3. Not Checking for Invalid Input

Not checking for invalid input can lead to errors or unexpected behavior.

Wrong Code:

$formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);

Corrected Code:

if (json_decode($jsonData, true) !== null) {
    $formattedJson = json_encode(json_decode($jsonData, true), JSON_PRETTY_PRINT);
    echo $formattedJson;
} else {
    echo "Invalid JSON input.";
}

Performance Tips

1. Use the JSON_PRETTY_PRINT Option Judiciously

While the JSON_PRETTY_PRINT option makes the JSON more readable, it can also increase the output size. Use it only when necessary, such as during development or debugging.

2. Use a Streaming JSON Parser for Large Inputs

When working with large JSON inputs, consider using a streaming JSON parser to improve performance.

3. Minimize JSON Encoding and Decoding

Minimize the number of times you encode and decode JSON data to reduce overhead.

FAQ

Q: What is the purpose of the JSON_PRETTY_PRINT option?

A: The JSON_PRETTY_PRINT option formats the JSON output with indentation and line breaks, making it human-readable.

Q: How do I handle empty or null input?

A: Check if the input is empty or null before attempting to format the JSON.

Q: What happens if the input is not a valid JSON string?

A: json_decode will return null. You can handle this case by checking the return value of json_decode.

Q: How do I improve performance when working with large JSON inputs?

A: Consider using a streaming JSON parser to improve performance.

Q: What is the difference between JSON_PRETTY_PRINT and JSON_UNESCAPED_UNICODE?

A: JSON_PRETTY_PRINT formats the JSON output with indentation and line breaks, while JSON_UNESCAPED_UNICODE outputs Unicode characters without escaping them.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp