PHPでJSONファイルの読み込み・書き込みをする

PHPでJSONファイルの読み込みをしてデコードする方法と、JSONファイルに書き込みをする方法について説明します。 JSONとは、JavaScript Object Notationの略で、文字通りJavaScript のオブジェクト表記法をベースとしたデータ形式ですが、複数の言語がJSONに対応しているので、開発言語の異なるシステム間でのデータのやり取りなどに向いてます。

JSONファイルの読み込み:デコード

json_decode ( 変換文字列 [, TRUE | FALSE ] );
APIのレスポンスやJSONファイルのJSON文字列をデコードして、PHPの変数に変換します。第二引数をtrueにすると配列に変換され、デフォルトのfalseだとオブジェクトに変換されます。 サンプルコード
$json = '{
    "name": "テスト",
    "gender": "男"
}';

$decoded_json = json_decode($json);

var_dump($decoded_json);
出力結果
object(stdClass)#1 (2) {
  ["name"]=>
  string(9) "テスト"
  ["gender"]=>
  string(3) "男"
}

JSONファイル形式での書き込み:エンコード

json_encode ( 変数 [,オプション, ネストの深さ] );
配列やオブジェクトからJSON文字列に変換するにはjson_encode関数を使います。第2引数には、JSON_HEX_QUOT, JSON_HEX_TAGなどの定数を指定し、第3引数にはJSONの最大のネストの深さを指定します。 また、すべての文字列データは、UTF-8 エンコードされていなければなりません。 以下は、配列をjson_encodeで変換し、sample.jsonに保存するサンプルです。 サンプルコード
$obj = '{ "name": "なまえ",  "gender": "男"}';
$data = json_decode($obj,true);

$json = fopen('sample.json', 'w+b');
fwrite($json, json_encode($data));
fclose($json);
sample.json
{"name":"\u540d\u524d","gender":"\u6027\u5225"}

json_encodeで日本語が文字化けする

マルチバイト文字をJSONにエンコードした場合、sample.jsonのようにエスケープされ文字化けしているように見えますが、json_decode関数でデコードすることで正常に扱えるので問題ありません。 エスケープしたくないという場合、PHP5.4以降であれば、JSON_UNESCAPED_UNICODE定数を第二引数に指定すればマルチバイト文字のままJSON文字列となります。
$data = json_encode($array, JSON_UNESCAPED_UNICODE);

イベント

2017/10/06(金)
UX School(全10回)