PHPのjson_encodeとjson_decodeの使い方についてメモ。
json_encode
json_encodeは配列やオブジェクトなどをjson形式にして返します。
$arr = array( 'str_jp' => 'ラブライブ!', 'str_en' => 'lovelive!', 'tags' => '<foo class="maki">', 'apos' => "I'm Erichika!", 'and' => 'MYTH & ROID' ); var_dump(json_encode($arr));
var_dumpで以下のように出力されます。
string(138) "{"str_jp":"\u30e9\u30d6\u30e9\u30a4\u30d6!","str_en":"lovelive!","tags":"","apos":"I'm Erichika!","and":"MYTH & ROID"}"
第2引数にオプションを指定することができます。
$arr = array( 'str_jp' => 'ラブライブ!', 'str_en' => 'lovelive!', 'tags' => '<foo class="maki">', 'apos' => "I'm Erichika!", 'and' => 'MYTH & ROID' ); echo 'Normal: ' . json_encode($arr); echo "\n\n"; echo 'Tags: ' . json_encode($arr, JSON_HEX_TAG); echo "\n\n"; echo 'Apos: ' . json_encode($arr, JSON_HEX_APOS); echo "\n\n"; echo 'Quot: ' . json_encode($arr, JSON_HEX_QUOT); echo "\n\n"; echo 'Amp: ' . json_encode($arr, JSON_HEX_AMP); echo "\n\n"; echo 'Unicode: ' . json_encode($arr, JSON_UNESCAPED_UNICODE); echo "\n\n"; echo 'All: ' . json_encode($arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE); echo "\n\n";
以下のような結果になります。
Normal: {"str_jp":"\u30e9\u30d6\u30e9\u30a4\u30d6!","str_en":"lovelive!","tags":"<foo class=\"maki\">","apos":"I'm Erichika!","and":"MYTH & ROID"} Tags: {"str_jp":"\u30e9\u30d6\u30e9\u30a4\u30d6!","str_en":"lovelive!","tags":"\u003Cfoo class=\"maki\"\u003E","apos":"I'm Erichika!","and":"MYTH & ROID"} Apos: {"str_jp":"\u30e9\u30d6\u30e9\u30a4\u30d6!","str_en":"lovelive!","tags":"<foo class=\"maki\">","apos":"I\u0027m Erichika!","and":"MYTH & ROID"} Quot: {"str_jp":"\u30e9\u30d6\u30e9\u30a4\u30d6!","str_en":"lovelive!","tags":"<foo class=\u0022maki\u0022>","apos":"I'm Erichika!","and":"MYTH & ROID"} Amp: {"str_jp":"\u30e9\u30d6\u30e9\u30a4\u30d6!","str_en":"lovelive!","tags":"<foo class=\"maki\">","apos":"I'm Erichika!","and":"MYTH \u0026 ROID"} Unicode: {"str_jp":"ラブライブ!","str_en":"lovelive!","tags":"<foo class=\"maki\">","apos":"I'm Erichika!","and":"MYTH & ROID"} All: {"str_jp":"ラブライブ!","str_en":"lovelive!","tags":"\u003Cfoo class=\u0022maki\u0022\u003E","apos":"I\u0027m Erichika!","and":"MYTH \u0026 ROID"}
JSON_HEX_TAG | 「<」と「>」をそれぞれ「\u003C」と「\u003E」に変換。 |
---|---|
JSON_HEX_APOS | 「’」を「\u0027」に変換。 |
JSON_HEX_QUOT | 「"」を「\u0022」に変換。 |
JSON_HEX_AMP | 「&」を「\u0026」に変換。 |
JSON_UNESCAPED_UNICODE | マルチバイトUnicode文字をそのままの形式で扱う。 |
オプションは他にもいくつかありますので、詳しくは下記をご確認ください。
PHP: json_encode – Manual
json_decode
json_decodeはjson文字列をデコードして返します。
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); echo "\n\n"; var_dump(json_decode($json, true)); echo "\n\n";
以下のような結果になります。
object(stdClass)#1 (5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) } array(5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) }
第2引数を指定しない場合(false)はobject、trueを指定した場合は配列で値が返ってきます。
json_decodeのデモページ
【参考サイト】
コメントが承認されるまで時間がかかります。