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制作を中心に日々学びになったこと、興味が沸いたことについて初心者の方でもわかりやすいようにアウトプットしていくブログです。

関連記事

次世代画像フォーマットWebPでサイトの表示速度を改善しよう!

次世代画像フォーマットWebPでサイトの表示速度を改善しよう!

【完全禁止は難しい】Webサイトの画像保存を禁止させる方法

【完全禁止は難しい】Webサイトの画像保存を禁止させる方法

CSSでスクロールバーのデザインを変更する方法

CSSでスクロールバーのデザインを変更する方法

【CSSのみ】背景のグラデーションを変化させるアニメーション

【CSSのみ】背景のグラデーションを変化させるアニメーション

Contact form 7「サイトのドメインに属していないメールアドレスが送信元に設定されています」の理由と対処法

Contact form 7「サイトのドメインに属していないメールアドレスが送信元に設定されています」の理由と対処法

【GSAP】擬似要素(before・after)をアニメーションさせる方法

【GSAP】擬似要素(before・after)をアニメーションさせる方法