2012/01/03更新

[PHP] PHPでJSONオブジェクトを扱うには

このエントリーをはてなブックマークに追加            

こんちには、@yoheiMuneです。
今日は、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でもあつかうようになりました(*´∇`*)





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。