
どうも!かけちまるです!
最近はPHPを使うことがありましてデータの受け渡しにはJSONが便利なのでPHPでJSONをよく扱うんですよね。
そんな時に配列をJSON形式にエンコードしたりJSON形式を配列にデコードしたりする時に使う関数のjson_encode()
とjson_decode()
について解説していこうと思います。
JSONを整形したり、マルチバイト文字をそのまま出力したりなどのやり方もご紹介しているので参考にしてみてください。
この記事を読むと、
が理解できます。
PHPではよく使う関数の1つだと思うのでマスターしておくと良さそうですね。
まずエンコードの説明からすると、エンコードはある規則に基づいて別の形に変換することでデコードはエンコードされたやつを元に戻すです。
例えていうなら日本語を英語に訳すのがエンコードで英語を日本語に戻すのがデコードというイメージです。
今回は配列をJSONにするのがエンコードでJSON形式を配列にするのがデコードになりますね。
json_encode()
は、配列をJSON形式に変換する関数です。
PHPコピーjson_encode(配列 , オプション);
オプション部分は省略可能です。
オプションは「|」で複数設定することも可能です。
オプションは省略可能ですがの指定はほぼ必須になるかと思います。
理由としては、
このくらいですかね?他にありますかね?
PHPコピーjson_encode(配列); // オプションなしで出力されたJSON [{"id":1,"name":"\u5c71\u7530\u3055\u3093","age":34,"color":"\u9ec4\u8272"},{"id":2,"name":"\u4f50\u85e4\u3055\u3093","age":22,"color":"\u8d64\u8272"},{"id":3,"name":"\u7530\u4e2d\u3055\u3093","age":30,"color":"\u9752\u8272"}] json_encode(配列 , オプション); // オプションをつけて出力されたJSON [ { "id": 1, "name": "山田さん", "age": 34, "color": "黄色" }, { "id": 2, "name": "佐藤さん", "age": 22, "color": "赤色" }, { "id": 3, "name": "田中さん", "age": 30, "color": "青色" } ]
オプションは2つ紹介します。
日本語が「\u5c71」みたいな感じになっちゃったり、JSONファイルをに改行とかがなくて読みづらいくなっちゃったりを解決するオプションです。
JSON_PRETTY_PRINT | 書式を改行で整える |
---|---|
JSON_UNESCAPED_UNICODE | マルチバイト文字をそのまま出力する |
※マルチバイト文字は全角文字のことだと思ってください。
PHPコピー$array = [ ['id' => 01, 'name' => '山田さん', 'age' => 34, 'color' => '黄色'], ['id' => 02, 'name' => '佐藤さん', 'age' => 22, 'color' => '赤色'], ['id' => 03, 'name' => '田中さん', 'age' => 30, 'color' => '青色'] ]; $json = json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); file_put_contents(‘test.json’ , $json); // 出力されたJSONファイル [ { "id": 1, "name": "山田さん", "age": 34, "color": "黄色" }, { "id": 2, "name": "佐藤さん", "age": 22, "color": "赤色" }, { "id": 3, "name": "田中さん", "age": 30, "color": "青色" } ]
json_decode()
は、JSON形式を配列に変換する関数です。
PHPコピーjson_decode(配列 , オプション);
json_decode()
は、オプションを省略することができます。json_decode()
は、オプションを指定しないとオブジェクトで結果を返してしまいます。
なので、連想配列で返して欲しい場合はオプションに「true
」または「JSON_OBJECT_AS_ARRAY
」を指定します。
オプションを「true
」に設定しておけば「JSON_OBJECT_AS_ARRAY
」に自動的に設定していることになるので「true
」に設定しておけば良いと思います。
PHPコピー$json = '[ { "id": "01", "name": "山田さん", "age": "34", "color": "黄色" }, { "id": "02", "name": "佐藤さん", "age": "22", "color": "赤色" }, { "id": "03", "name": "田中さん", "age": "30", "color": "青色" } ]'; $array = json_decode($json, true); var_dump($array); // 出力された連想配列 array(3) { [0]=> array(4) { ["id"]=> string(2) "01" ["name"]=> string(12) "山田さん" ["age"]=> string(2) "34" ["color"]=> string(6) "黄色" } [1]=> array(4) { ["id"]=> string(2) "02" ["name"]=> string(12) "佐藤さん" ["age"]=> string(2) "22" ["color"]=> string(6) "赤色" } [2]=> array(4) { ["id"]=> string(2) "03" ["name"]=> string(12) "田中さん" ["age"]=> string(2) "30" ["color"]=> string(6) "青色" } }
サンプルコードでは、分かりやすさ重視でJSONを直接書いていますが実際はfile_get_contents
関数でJSONファイルを外部から読み込んで使うことが多いのではと思います。
おわり
フィードバックを送信
記事についてのフィードバックはTwitterかお問い合わせフォームから受け付けております。