phpでjsonファイルを読み込んだり、書き込んだりする機会があったので、
学んだ手順を紹介する。
phpの連想配列を使用でき、構造上、jsonと同じく「キーとバリュー」でデータを管理することから、覚えるととても簡単だった。
phpでjsonファイルを読み込みする(json_decode)
phpからjsonファイルを読み込みするには、
json_decode関数を使用する。
例えば以下のようなjsonファイルがあるとする(MyCompany.json)。
# MyCompany.json
{
"companyName": "hoge.inc",
"CEO": "Hara-chan",
"history": {
"born": {
"year": "1980",
"place": "Tokyo"
}
}
}
jsonファイルを文字列として読み込む
まずは上記jsonファイルを、phpから読み込む。
ここで言う読み込むとは、ただの文字列として読み込むと言うことだ。
json → 連想配列にするためには、まずはjson形式で書かれたファイルを文字列として読み込むと言う過程が必要だ。file_get_contents()関数などを使用すると良いだろう。
#MyCompany.php
$MCjson = file_get_contents("MyCompany.json"); //文字列データとしてjsonファイルを読み込み。
次に、読み取ったJSONデータを表示するときに文字化けしないように次のように記述する。
$MCjson = mb_convert_encoding($MCjson, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
mb_convert_encoding()という関数を使用する。
これは、ASCII,JIS,UTF-8,EUC-JP,SJIS-WINの順番で自動検出し、UTF8に変換するという意味だ。
json_decode():文字列データを連想配列へ変換する
json_decode()と言う関数を使用して、json形式の文字列データを読み込む。
$MCobj = json_decode($MCjson,true);
trueを第二引数に渡すのを忘れずに。連想配列として変換するために必要だ。
読み込んだjsonデータへ、連想配列としてアクセス。
// 連想配列へのアクセス
echo $MCobj['companyName']; //hoge.inc
echo $MCobj['CEO']; //Hara-chan
echo $MCobj['history']['born']['year']; //1980
echo $MCobj['history']['born']['place']; //Tokyo
以上で、phpからjsonファイルを読み込む手順は終了。
phpでjsonファイルを書き込みする(json_encode)
phpからjsonファイルを書き込みするには、
json_encode関数を使用する。
$MCobj = [
"companyName" => "hoge.inc",
"CEO" => "Hara-chan",
"history" => [
"born" => [
"year" => "1980",
"place" => "Tokyo"
]
]
];
echo json_encode($MCobj);
//{"companyName":"hoge.inc","CEO":"Hara-chan","history":{"born":{"year":"1980","place":"Tokyo"}}}
使い方はいたって簡単で、
json_encode()関数に、連想配列を引数に渡すだけ。
連想配列をjson形式の文字列データに変換してくれる。
ただ、上記はアルファベットのみだから問題ないが、日本語なども含める場合は、
第二引数にJSON_UNESCAPED_UNICODEを指定すると良い。
$MCobj = [ 'kanji' => '漢字' ];
echo json_encode($MCobj, JSON_UNESCAPED_UNICODE);
//{"kanji":"漢字"}
JSON_UNESCAPED_UNICODEオプションを指定しないと、
文字列がUnicodeエスケープシーケンスに変換されてしまうため、データが扱いずらくなってしまうからだ。
$MCobj = [ 'kanji' => '漢字' ];
echo json_encode($MCobj);
//{"kanji":"\u6f22\u5b57"} //Unicodeエスケープシーケンスに変換されてしまう。
最後に、file_put_contents()などを使い、
文字列データをjsonファイルとして保存すれば、書き込み完了だ。
file_put_contents("test.json", $MCobj);
以上でphpからjsonファイルを書き込む方法は終了。
おまけ:JavaScriptからjsonデータを読み書きする方法
(JavaScript) Jsonデータの読み込み・書き込み方法と言うのも下記記事にて紹介しているので、
もし気が向いたら読んで欲しい。