[PHP] PHPでJSONオブジェクトを扱うには
こんちには、@yoheiMuneです。
今日は、PHPにおいてJSONオブジェクト(JavaScript Object Notation)を扱う方法について調べたので、 ブログに残しておきたいと思います。
最近のWebサービス(RESTなど)では、JSONオブジェクトを返すサービスが増えよう思います。 JSONについての詳細は、こちら(http://www.json.org/json-ja.html)を参照ください。 JSONはJavaScriptのオブジェクト形式は、XMLに加えて同じ情報を少ないデータ量で伝えることが出来るので、 最近は大注目です!!
写真:ワット・プララーム
http://www.aurore.net/projects/php-json/
まずは、WebサービスがJSONを返してきた場合に、それをPHPのオブジェクトへ変換する方法です。
以下のようなJSONがWebサービスから返ってきた場合、
PHPでは、以下のようにコーディングするとPHPオブジェクトを生成出来ます。ここでは、「json_decode」関数がポイントです。
もう少し複雑なJSON(配列形式を含む、オブジェクト内にオブジェクトがあるなど)の場合には、 PHPオブジェクトは以下のようになります。
なお、日本語などのマルチバイト文字を扱う場合には、エンコード変換(mb_convert_encoding)などが必要になるかもしれません。。
PHPオブジェクトを「json_encode」関数を用いてJSONに変換します。
ここでの注意点は、日本語などのマルチバイト文字は「¥uxxxx」のようにエンコードされる点です。 これはJSONの仕様のようです。
JSONはUNICODEを扱えますが、通信中はASCIIで表現出来る範囲にしているようです。 JavaScriptなどでは「¥uxxxx」でエンコーディングされた文字列もデコードされた状態で扱えるはず。
- http://php.net/manual/ja/function.json-encode.php
- http://php.net/manual/ja/function.json-decode.php
色々な言語でJSONを簡単に扱えるようになると楽ですね。 JavaScriptやPHP以外にも、JavaやObjective-Cでもあつかうようになりました(*´∇`*)
今日は、PHPにおいてJSONオブジェクト(JavaScript Object Notation)を扱う方法について調べたので、 ブログに残しておきたいと思います。
最近のWebサービス(RESTなど)では、JSONオブジェクトを返すサービスが増えよう思います。 JSONについての詳細は、こちら(http://www.json.org/json-ja.html)を参照ください。 JSONはJavaScriptのオブジェクト形式は、XMLに加えて同じ情報を少ないデータ量で伝えることが出来るので、 最近は大注目です!!
写真:ワット・プララーム
PHPの事前設定
PHPでJSONオブジェクトを扱う際に、PHP5.2.0以上であれば特に事前設定は必要ありませんが、 それ以前のバージョンの場合には、「php-json」を組み込む必要があります。詳細は、以下を参照ください。http://www.aurore.net/projects/php-json/
JSONオブジェクトからPHPのオブジェクトを作成する
続いて使い方(*´∇`*)まずは、WebサービスがJSONを返してきた場合に、それをPHPのオブジェクトへ変換する方法です。
以下のようなJSONがWebサービスから返ってきた場合、
{"a":"1", "b":"2", "c":"3"}'
PHPでは、以下のようにコーディングするとPHPオブジェクトを生成出来ます。ここでは、「json_decode」関数がポイントです。
$json = /*サーバーからJSON戻り値が格納されている*/; // JSON文字列をPHPオブジェクトに変換する $jsonPHP = json_decode($json); // PHPオブジェクトの内容を出力する var_dump($jsonPHP); // 出力結果は以下 // object(stdClass)#1 (3) { // ["a"] => string(1) "1" // ["b"] => string(1) "2" // ["c"] => string(1) "3" }
もう少し複雑なJSON(配列形式を含む、オブジェクト内にオブジェクトがあるなど)の場合には、 PHPオブジェクトは以下のようになります。
$json = '{ "name" : "Alex", "age" : 20, "hobbies" : ["walking", "tennis"], "family" : { "Father" : "Tom", "Mother" : "Merry" } }'; $jsonPHP = json_decode($json); var_dump($jsonPHP); // var_dumpの出力結果は、以下となる // object(stdClass)#1 (4) { // ["name"] => string(4) "Alex" // ["age"] => int(20) // ["hobbies"] => array(2) { // [0] => string(7) "walking" // [1] => string(6) "tennis" // } // ["family"] => object(stdClass)#2 (2) { // ["Father"] => string(6) "Tom" // ["Mother"] => string(6) "Merry" // } }
なお、日本語などのマルチバイト文字を扱う場合には、エンコード変換(mb_convert_encoding)などが必要になるかもしれません。。
PHPオブジェクトからJSON文字列を生成する
続いて上記の逆で、PHPオブジェクトをJSON文字列に変換する方法です。PHPオブジェクトを「json_encode」関数を用いてJSONに変換します。
$jsonPHP = /* オブジェクトを生成する*/; // $jsonPHPの中身は以下です。 // var_dumpの出力結果は、以下となる // object(stdClass)#1 (4) { // ["name"] => string(4) "Alex" // ["age"] => int(20) // ["hobbies"] => array(2) { // [0] => string(7) "walking" // [1] => string(6) "tennis" // } // ["family"] => object(stdClass)#2 (2) { // ["Father"] => string(6) "Tom" // ["Mother"] => string(6) "Merry" // } // JSON文字列を生成する $jsonStr = json_encode($jsonPHP); // 表示してみる echo $jsonStr; // 以下が表示結果 // { // "name" : "Alex", // "age" : 20, // "hobbies" : ["walking","tennis"], // "family":{"father":"\u30c8\u30e0","Mother":"Mearry"} // }
ここでの注意点は、日本語などのマルチバイト文字は「¥uxxxx」のようにエンコードされる点です。 これはJSONの仕様のようです。
JSONはUNICODEを扱えますが、通信中はASCIIで表現出来る範囲にしているようです。 JavaScriptなどでは「¥uxxxx」でエンコーディングされた文字列もデコードされた状態で扱えるはず。
参考情報
PHPでのJSONエンコード/デコードは、以下のサイトを参考にしました。ありがとうございます(*´∇`*)- http://php.net/manual/ja/function.json-encode.php
- http://php.net/manual/ja/function.json-decode.php
最後に
JSONは最近ホントに良く使うようになりました。色々な言語でJSONを簡単に扱えるようになると楽ですね。 JavaScriptやPHP以外にも、JavaやObjective-Cでもあつかうようになりました(*´∇`*)