PHPではJSON形式のデータをそのままで扱うことができません。
使用するためには連想配列の形に変換する必要があります。
今回はJSONファイルを用意しそのファイルを読み込み、連想配列に変換するまでの実装を紹介します。
JSONのサンプルは下記サイトのものを使用しています。
{"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の変数に変換