PHP の json_encode で変換後の文字列を僕が読みやすいようにする

マニュアルにある 定義済み定数 をオプションに指定して 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 できます!