[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でもあつかうようになりました(*´∇`*)




