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"
コメント