[php標準関数]json_encode, json_decodeについて

PHP

json_encode, json_decodeについて、
どっちがどっちってなることがよくあるので整理してみました。

言葉の意味がわかってないと頭に入らない気がするので、
encode / decodeの英語訳も翻訳サイトで見てみました(笑)

encode, decodeの英語翻訳

翻訳サイトで見てみると…

encode
– 暗号に書き直す(暗号化)

decode
– (…の)暗号を解く、平文に直す(解読)

ということらしいです。

json = 暗号と捉えて

json_encodeはjsonという暗号にする
json_decodeはjsonという暗号から平文に直す…

という感じですかね…

json_encode (php変数 => json)

phpの変数からjson文字列に変換する方ですね。
公式のドキュメントはこちら

PHP: json_encode - Manual
json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) : string

使い方

連想配列を渡すと、json形式に変換してくれます。

json_encode(['user1' => ['name' => 'username', 'age' => '31']]);

結果 => "{"user1":{"name":"username","age":"31"}}"

json_decode (json => php変数)

json文字列からphpの変数に変換する方ですね。
公式のドキュメントはこちら

PHP: json_decode - Manual
json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] ) : mixed

※UTF-8の文字列でのみしか動かないようです。

使い方

json文字列を渡すと…

$decode = json_decode('{"user1":{"name":"username","age":"31"}}');
>>> var_dump($decode);

object(stdClass)#2370 (1) {
  ["user1"]=>
  object(stdClass)#2359 (2) {
    ["name"]=>
    string(8) "username"
    ["age"]=>
    string(2) "31"
  }
}

スタンダードクラスになって返ってきてます!
クラスになるので、それぞれのプロパティにアクセスするには..

>>> $decode->user1->name
=> "username"

>>> $decode->user1->age
=> "31"

こんな感じですね。

配列にするには

明示的に配列にしたい場合は、第2引数にtrueを渡すとOKです。

$decode = json_decode('{"user1":{"name":"username","age":"31"}}', true);
=> [
     "user1" => [
       "name" => "username",
       "age" => "31",
     ],
   ]

>>> $decode["user1"]["name"]
=> "username"

>>> $decode["user1"]["age"]
=> "31"

コメント

タイトルとURLをコピーしました