Home
PHP
【PHP】json_encode()とjson_decode()でJSONを操る

【PHP】json_encode()とjson_decode()でJSONを操る

公開日
2021.04.30
更新日
2022.04.02
【PHP】json_encode()とjson_decode()でJSONを操る

どうも!かけちまるです!

最近はPHPを使うことがありましてデータの受け渡しにはJSONが便利なのでPHPでJSONをよく扱うんですよね。

そんな時に配列をJSON形式にエンコードしたりJSON形式を配列にデコードしたりする時に使う関数のjson_encode()json_decode()について解説していこうと思います。
JSONを整形したり、マルチバイト文字をそのまま出力したりなどのやり方もご紹介しているので参考にしてみてください。

この記事を読むと、

  • ・エンコードとデコードの意味
  • ・json_encode()の基本
  • ・json_encode()のオプション
  • ・json_decode()の基本
  • ・json_decode()のオプション

が理解できます。

PHPではよく使う関数の1つだと思うのでマスターしておくと良さそうですね。

エンコードとデコードとは?

まずエンコードの説明からすると、エンコードはある規則に基づいて別の形に変換することでデコードはエンコードされたやつを元に戻すです。

例えていうなら日本語を英語に訳すのがエンコードで英語を日本語に戻すのがデコードというイメージです。

エンコードとデコードの例

今回は配列をJSONにするのがエンコードでJSON形式を配列にするのがデコードになりますね。

json_encode()について

json_encode()は、配列をJSON形式に変換する関数です。

基本の書き方

PHP
コピー
json_encode(配列 , オプション);

オプション部分は省略可能です。
オプションは「|」で複数設定することも可能です。
オプションは省略可能ですがの指定はほぼ必須になるかと思います。

理由としては、

  • ・配列内に日本語があると「\u5c71」こんな感じの期待しない結果が返ってきてしまう
  • ・JSONファイルを出力する場合に、改行とかがなくて読みづらい

このくらいですかね?他にありますかね?

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_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ファイルを外部から読み込んで使うことが多いのではと思います。

おわり

かけちまる
かけちまる
Webエンジニアをしています。
HTML/CSS/JavaScript/jQuery/PHPができます。
WEB制作を中心に日々学びになったこと、興味が沸いたことについて初心者の方でもわかりやすいようにアウトプットしていくブログです。

関連記事

【CSS】mix-blend-modeで乗算などを表現する方法

【CSS】mix-blend-modeで乗算などを表現する方法

【modal-video.js使い方】YouTube、Vimeoをポップアップ再生する方法

【modal-video.js使い方】YouTube、Vimeoをポップアップ再生する方法

【Macユーザー向け】ngrokでローカル環境のサイトを外部へ公開

【Macユーザー向け】ngrokでローカル環境のサイトを外部へ公開

【WordPress】画像アップ時に自動生成されないようにする方法

【WordPress】画像アップ時に自動生成されないようにする方法

画像形式をWebPに変換するツール6選

画像形式をWebPに変換するツール6選

コピペで完了!CSSグラデーション(linear-gradient)まとめ

コピペで完了!CSSグラデーション(linear-gradient)まとめ