マニュアルにある 定義済み定数 をオプションに指定して json_encode で変換した後の文字列を読みやすいようにします。
変換するのはこのデータ。
<?php $data = [ 'name' => 's4_ba', 'web' => 'http://s4-ba.hatenablog.jp/', 'language' => '日本語', 'skill' => [ 'languages' => [ 'PHP', 'Java' => ['Servlet', 'JSP'], 'JavaScript', ], ], ];
json_encode
のオプションを指定しないと以下のように変換されます。
<?php json_encode($data); // {"name":"s4_ba","web":"http:\/\/s4-ba.hatenablog.jp\/","language":"\u65e5\u672c\u8a9e","skill":{"languages":{"0":"PHP","Java":["Servlet","JSP"],"1":"JavaScript"}}}
/
と日本語がエスケープされてるし、配列が1行になってるので見づらい...
これを json_encode
のオプションを指定して見やすくしていきます。
JSON_UNESCAPED_SLASHES
JSON_UNESCAPED_SLASHES
は /
のエスケープをしないようにするオプションです。
<?php json_encode($data, JSON_UNESCAPED_SLASHES); // {"name":"s4_ba","web":"http://s4-ba.hatenablog.jp/","language":"\u65e5\u672c\u8a9e","skill":{"languages":{"0":"PHP","Java":["Servlet","JSP"],"1":"JavaScript"}}}
JSON_UNESCAPED_UNICODE
JSON_UNESCAPED_UNICODE
はマルチバイトの Unicode 文字をエスケープしないうようにするオプションです。
<?php json_encode($data, JSON_UNESCAPED_UNICODE); // {"name":"s4_ba","web":"http:\/\/s4-ba.hatenablog.jp\/","language":"日本語","skill":{"languages":{"0":"PHP","Java":["Servlet","JSP"],"1":"JavaScript"}}}
JSON_PRETTY_PRINT
JSON_PRETTY_PRINT
は結果の文字列をスペースでインデントしてくれるオプションです。
<?php json_encode($data, JSON_PRETTY_PRINT); // { // "name": "s4_ba", // "web": "http:\/\/s4-ba.hatenablog.jp\/", // "language": "\u65e5\u672c\u8a9e", // "skill": { // "languages": { // "0": "PHP", // "Java": [ // "Servlet", // "JSP" // ], // "1": "JavaScript" // } // } // }
最後に
json_encode
のオプションはビットマスクなため、|
でつなぐことで同時に複数のオプションを利用できます。
ログ出力などの1行でいいときは JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
を利用して、
キレイな JSON を眺めたいときは JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT
を利用すると良いです。
<?php json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); // {"name":"s4_ba","web":"http://s4-ba.hatenablog.jp/","language":"日本語","skill":{"languages":{"0":"PHP","Java":["Servlet","JSP"],"1":"JavaScript"}}} json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); // { // "name": "s4_ba", // "web": "http://s4-ba.hatenablog.jp/", // "language": "日本語", // "skill": { // "languages": { // "0": "PHP", // "Java": [ // "Servlet", // "JSP" // ], // "1": "JavaScript" // } // } // }
ちなみにいずれの方法で json_encode
しても json_decode
は同じ結果が返してくれるので安心して json_encode
できます!