PHPでJSONファイルの読み込みをしてデコードする方法と、JSONファイルに書き込みをする方法について説明します。
JSONとは、JavaScript Object Notationの略で、文字通りJavaScript のオブジェクト表記法をベースとしたデータ形式ですが、複数の言語がJSONに対応しているので、開発言語の異なるシステム間でのデータのやり取りなどに向いてます。
JSONファイルの読み込み:デコード
1 |
json_decode ( 変換文字列 [, TRUE | FALSE ] ); |
APIのレスポンスやJSONファイルのJSON文字列をデコードして、PHPの変数に変換します。第二引数をtrueにすると配列に変換され、デフォルトのfalseだとオブジェクトに変換されます。
サンプルコード
1 2 3 4 5 6 7 8 |
$json = '{ "name": "テスト", "gender": "男" }'; $decoded_json = json_decode($json); var_dump($decoded_json); |
出力結果
1 2 3 4 5 6 |
object(stdClass)#1 (2) { ["name"]=> string(9) "テスト" ["gender"]=> string(3) "男" } |
JSONファイル形式での書き込み:エンコード
1 |
json_encode ( 変数 [,オプション, ネストの深さ] ); |
配列やオブジェクトからJSON文字列に変換するにはjson_encode関数を使います。第2引数には、JSON_HEX_QUOT, JSON_HEX_TAGなどの定数を指定し、第3引数にはJSONの最大のネストの深さを指定します。
また、すべての文字列データは、UTF-8 エンコードされていなければなりません。
以下は、配列をjson_encodeで変換し、sample.jsonに保存するサンプルです。
サンプルコード
1 2 3 4 5 6 |
$obj = '{ "name": "なまえ", "gender": "男"}'; $data = json_decode($obj,true); $json = fopen('sample.json', 'w+b'); fwrite($json, json_encode($data)); fclose($json); |
sample.json
1 |
{"name":"\u540d\u524d","gender":"\u6027\u5225"} |
json_encodeで日本語が文字化けする
マルチバイト文字をJSONにエンコードした場合、sample.jsonのようにエスケープされ文字化けしているように見えますが、json_decode関数でデコードすることで正常に扱えるので問題ありません。
エスケープしたくないという場合、PHP5.4以降であれば、JSON_UNESCAPED_UNICODE定数を第二引数に指定すればマルチバイト文字のままJSON文字列となります。
1 |
$data = json_encode($array, JSON_UNESCAPED_UNICODE); |