PHP で JSON 文字列を2スペースインデントで整形出力する

PHP で簡単な JSON API を作っている。データを JSON ファイルに書き出す時に json_encode() 関数を使うが、この関数、デフォルトでは改行やスペースが含まれないので、出力した JSON ファイルは可読性に欠ける。

次のようにオプションを書くと、日本語文字を Unicode エスケープさせず、4スペースインデントで整形して出力できるようになる。

$jsonString = json_encode($myArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

まぁコレでも良いかと思ったが、せっかくなら2スペースインデントにしたく調べたところ、こんなやり方でできるらしい。

$jsonString = preg_replace_callback('/^ +/m', function($spaces) {
  return str_repeat(' ', strlen($spaces[0]) / 2);
}, json_encode($array, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

JSON_PRETTY_PRINT で4スペースインデントにした内容から、行頭のスペースを半分の数に置換しているようだ。