旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

HTML_AJAX_JSONでちょっと困ること

2007年7月9日

PHPのPEARライブラリである、HTML_AJAX_JSONで
微妙に不便なところが
というのは、例えば以下のPHP配列をJSON化しているコード

<?php
$source = array(1,2,3);
require_once "/path/to/HTML_AJAX-0.5.0/AJAX/JSON.php";
$haj =& new HTML_AJAX_JSON;
$json = $haj->encode($source);
echo $json; // -> "[1,2,3]"を出力

これ、勝手に「JS上も配列ッ!」って判断されてますが

{"0":1, "1":2, "2":3}

JS側でこういう風に整形して欲しいことも、あるんじゃないのと。

オプション指定とかで変えられるのかと思って、該当箇所を見てみると

// $var が、JSON化の元となるPHP配列
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
// JSの連想配列として文字列生成を行う処理
}

つまり、[0][1][2]… と、0から連番で振られている配列は、JS上も配列とみなすってことらしいです。
逆に言えば、[0][1][3] とか [1][2][3] とかは、必ず連想配列になってしまう。

PHP側のオブジェクトをJSON化するとJS側は連想配列になるので、
それを使おうかと思ったら、”var $0″ とかは宣言できないし。

なるほどなぁ
PHP的に仕方ない気もしますけど
実際困ってるんだこのやろう

・・・と、krsort関数とかで、0123…の順番を変えればいいのか。
頭固いなー