rfc:json_encode_indentation

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 int and its default value is 4.

By default, an indentation of 4 spaces will be applied, just like the original json_encode behaviour with the JSON_PRETTY_PRINT option.

When the indent parameter is passed a different value, 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;
 
?>
{
    "behavior": "default"
}
{
  "key": 4,
  "other_key": [
    2
  ]
}

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

Vote

Voting opened on 2022-07-04 and closes on 2022-07-18.

Add support for changing the JSON indentation amount?
Real name Yes No
aaronjunker Image 
alec  Image
asgrim  Image
ashnazg  Image
bmajdak Image 
bukka Image 
dharman  Image
didou Image 
galvao  Image
geekcom  Image
heiglandreas  Image
kalle  Image
kguest  Image
levim  Image
lufei  Image
marandall  Image
mbeccati  Image
nicolasgrekas Image 
ocramius  Image
reywob Image 
salathe  Image
santiagolizardo  Image
seld Image 
svpernova09  Image
timwolla  Image
trowski  Image
twosee  Image
weierophinney  Image
Final result: 7 21
This poll has been closed.
rfc/json_encode_indentation.txt · Last modified: by 127.0.0.1

Image