PHPで応答をJSON形式で返す方法について、教えてください。
PHPのメッソドjson_encodeを使う場合、うまくいかない場合があります。
PHPのメッソドjson_encodeを使う場合、うまくいかない場合があります。
ベストアンサー
1
iQi - 面白いアプリを開発中
{ 賛成 }: Lubo
PHPでJSON形式を出力する方法です。まずは、連想配列に項目を追加しておき、表示します。
// 生成した連想配列からJSON形式に変換して、表示
echo json_xencode($jsonArray);
json_xencodeという関数は別途定義した関数です。PHP5.3でも利用できるように記述したものです。
以下の関数は「オープンソースこねこね」様のサイトを参考にさせて頂きました。ありがとうございます。
json_xencode関数を定義しておけば、連想配列がそのままJSON形式で出力できるので非常に便利です。JSONというと難しく感じてしまう方もいるかもしれませんが、この関数を利用すれば特に意識することなく利用できると思います。
// 連想配列を生成
// 表示内容
// {
// "name":"アイスケット",
// "address":"神奈川県",
// "work":{
// "program":"PHP",
// "design":"CSS",
// "database":"MySQL"
// }
// }
$jsonArray = array(
'name' => 'アイスケット',
'address' => '神奈川県',
'work' => array(
'program' => 'PHP',
'design' => 'CSS',
'database' => 'MySQL'
)
);
// 生成した連想配列からJSON形式に変換して、表示
echo json_xencode($jsonArray);
json_xencodeという関数は別途定義した関数です。PHP5.3でも利用できるように記述したものです。
以下の関数は「オープンソースこねこね」様のサイトを参考にさせて頂きました。ありがとうございます。
/**
* ----------------------------------------------------------
* PHP5.4からでないと対応していないUnicodeアンエスケープをPHP5.3でもできるようにしたラッパー関数
* @param mixed $value
* @param int $options
* @param boolean $unescapee_unicode
* ----------------------------------------------------------
*/
function json_xencode($value, $options = 0, $unescapee_unicode = true)
{
$v = json_encode($value);
if ($unescapee_unicode) {
$v = unicode_encode($v);
// スラッシュのエスケープをアンエスケープする
$v = preg_replace('/\\\\\//', '/', $v);
}
return $v;
}
/**
* ----------------------------------------------------------
* Unicodeエスケープされた文字列をUTF-8文字列に戻す。
* 参考:http://d.hatena.ne.jp/iizukaw/20090422
* @param unknown_type $str
* ----------------------------------------------------------
*/
function unicode_encode($str)
{
return preg_replace_callback("/\\\\u([0-9a-zA-Z]{4})/", "encode_callback", $str);
}
function encode_callback($matches) {
return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "auto");
}
json_xencode関数を定義しておけば、連想配列がそのままJSON形式で出力できるので非常に便利です。JSONというと難しく感じてしまう方もいるかもしれませんが、この関数を利用すれば特に意識することなく利用できると思います。