unoh.github.com

PHPでJSONを扱う

Tue Nov 27 22:46:36 -0800 2007

yamaokaです。

Ajaxの普及に伴い、JavaScriptで扱いやすいJSON形式で サーバーからのレスポンスを返すことが増えてきているように思います。 PHPでJSONを扱う方法についていくつか紹介します。

JSON関数

もともとPECLの拡張モジュールとして提供されていましたが、 PHP 5.2.0以降、デフォルトでPHPに組み込まれるようになっています。 そのため、最も利用しやすい形式なのではないかと思います。

利用方法は以下のとおりです。json_decodeの戻り値はオブジェクトになります(第2引数にtrueを指定すると連想配列になります)。

$values = array('company' => 'ウノウ', 'name' => 'yamaoka');

$json = json_encode($values);
// string '{"company":"\u30a6\u30ce\u30a6","name":"yamaoka"}' (length=49)

$values = json_decode($json);
// object(stdClass)[1]
//   public 'company' => string 'ウノウ' (length=9)
//   public 'name' => string 'yamaoka' (length=7)

Jsphon

JsphonHawkさんの開発によるJSONライブラリです。 PHPで記述されており、PEARコマンドを利用して簡単にインストール、利用することができます。 Unicode Escape Sequenceをきちんと扱うことができるのが特徴です。日本語を扱う場合、心強いですね。

利用方法は以下のとおりです。Jsphon::decodeの戻り値は連想配列になっています。

require_once 'Jsphon.php';
$values = array('company' => 'ウノウ', 'name' => 'yamaoka');

$json = Jsphon::encode($values);
// string '{"company":"\u30a6\u30ce\u30a6","name":"yamaoka"}' (length=49)

$valeus = Jsphon::decode($json);
// array
//   'company' => string 'ウノウ' (length=9)
//   'name' => string 'yamaoka' (length=7)

PHP4とPHP5、また、PEAR環境の有無によってもエラーハンドリングが異なるので注意が必要です。 詳しくはJsphonのページのエラー処理に関する記述を参照してください。

Zend_Json

Zend_JsonはZend Frameworkに含まれるJSONを扱うためのコンポーネントです。 詳細はZend Frameworkのドキュメントを参照してください。

利用方法は以下のとおりです。Zend_Json::decodeの戻り値は連想配列になっています。

require_once 'path/to/Zend/Json.php';
$values = array('company' => 'ウノウ', 'name' => 'yamaoka');

$json = Zend_Json::encode($values);
// string '{"company":"\u30a6\u30ce\u30a6","name":"yamaoka"}' (length=49)

$valeus = Zend_Json::decode($json);
// array
//   'company' => string 'ウノウ' (length=9)
//   'name' => string 'yamaoka' (length=7)

ちなみに、Zend_Json::useBuiltinEncoderDecoderの値をtrueにすると、 JSON関数が利用できる場合はそちらを使うように挙動が変更されます。

まとめ

Zend_Jsonのように、フレームワークに JSONを扱う機能が備わっている場合はそれを使うのが一番手軽だと思います。 そうでない場合、JSON関数かJsphonを利用することになるでしょう。 ただ、日本語を扱う場合はUnicode Escape Sequenceをきちんと扱うことができる Jsphonの方が安心かもしれませんね。