バックエンド

PHPでJSONファイルを読み込む方法

PHPではJSON形式のデータをそのままで扱うことができません。
使用するためには連想配列の形に変換する必要があります。

今回はJSONファイルを用意しそのファイルを読み込み、連想配列に変換するまでの実装を紹介します。

JSONのサンプルは下記サイトのものを使用しています。

https://json.org/example.html

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

PHP側で読み込む処理

$json_file = "example.json";

if(file_exists($json_file)) {
    $json = file_get_contents($json_file);
    $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
    $obj = json_decode($json, true);

    var_dump($obj);
}

上記、PHPコードを実行するとvar_dump関数から以下の結果が返ってきます。

array(1) {
  ["menu"]=> array(3) {
    ["id"]=> string(4) "file"
    ["value"]=> string(4) "File"
    ["popup"]=> array(1) {
      ["menuitem"]=> array(3) {
        [0]=> array(2) {
          ["value"]=> string(3) "New"
          ["onclick"]=> string(14) "CreateNewDoc()"
        }
        [1]=> array(2) {
          ["value"]=> string(4) "Open"
          ["onclick"]=> string(9) "OpenDoc()"
        }
        [2]=> array(2) {
          ["value"]=> string(5) "Close"
          ["onclick"]=> string(10) "CloseDoc()"
        }
      }
    }
  }
}

var_dump($obj)の箇所をvar_dump($obj['menu']['popup']['menuitem'])に変更することでmenuitem以下のみを取得することもできます。

$json_file = "example.json";

if(file_exists($json_file)) {
    $json = file_get_contents($json_file);
    $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
    $obj = json_decode($json, true);

    var_dump($obj['menu']['popup']['menuitem']);
}

取得結果(var_dump($obj['menu']['popup']['menuitem']))

array(3) {
  [0]=> array(2) {
    ["value"]=> string(3) "New"
    ["onclick"]=> string(14) "CreateNewDoc()"
  }
  [1]=> array(2) {
    ["value"]=> string(4) "Open"
    ["onclick"]=> string(9) "OpenDoc()"
  }
  [2]=> array(2) {
    ["value"]=> string(5) "Close"
    ["onclick"]=> string(10) "CloseDoc()"
  }
}

各関数の説明

file_exists関数でファイルの存在確認を行います。
file_get_contents関数でファイルの読み込み
mb_convert_excoding関数で文字化けしないようにエンコード
json_decode関数でエンコードされた文字列を受け取り、PHPの変数に変換

-バックエンド
-