rfc:json_encode_indentation

This is an old revision of the document!


PHP RFC: json_encode indentation

Introduction

Programs can serialize data to JSON using the json_encode function. The function is widely used for generating JSON responses or payload over HTTP. Currently, it's not possible to tell json_encode what indentation level (2 spaces, 4 spaces, etc.) should be used when using the JSON_PRETTY_PRINT option. When generating JSON files which can be used/read/edited by users, indentation starts to become a relevant topic.

Proposal

Introducing a 4th parameter, called indent. The type of the parameter is string|int and its default value is 4.

When a string is passed, that character sequence will be used for indentation, where it normally would be ' ' (4 spaces). Users passing a string must be aware that usage of invalid JSON characters in the indentation value will natually cause invalid formatted JSON data.

When an int is passed, an indentation of N spaces will be applied.

$data = [
    'key' => 4,
    'other_key' => [2]
];
 
echo json_encode(['behavior' => 'default'], JSON_PRETTY_PRINT) . PHP_EOL;
echo json_encode($data, JSON_PRETTY_PRINT, 512, 2) . PHP_EOL;
echo json_encode(['unicode' => "supported"], JSON_PRETTY_PRINT, 512, '๐Ÿš€๐Ÿš€') . PHP_EOL;
echo json_encode(['tabs' => "better"], JSON_PRETTY_PRINT, 512, "\t") . PHP_EOL;
 
?>
{
    "behavior": "default"
}
{
  "key": 4,
  "other_key": [
    2
  ]
}
{
๐Ÿš€๐Ÿš€"unicode": "supported"
}
{
	"tabs": "better"
}

Backward Incompatible Changes

The only breaking change this could cause is when programs are already passing a fourth parameter by accident.

Proposed PHP Version(s)

  • next PHP 8.x

Unaffected PHP Functionality

Normal usage (as opposed to what is described in BIC) of the json_encode function will not be affected, as the default of 4 spaces will still be in effect.

Patches and Tests

Tests are written with the RFC

rfc/json_encode_indentation.1622733810.txt.gz ยท Last modified: 2021/06/03 15:23 by tdgroot

๏ปฟ