2010年11月26日金曜日

PHPの json_decode()は大きな整数を floatにしてしまう

Twitterのid(TwitterのTweet全てで連番になっている)が16桁になり、もうすぐ17桁になりそうな昨今、32bitのIntでは対応できない。
なので文字列として扱いたいが、PHP標準関数のjson_decode()ではこれをなぜかfloatに変換してしまう。

PHP: json_decode - Manual
JSON デコードオプションのビットマスク。現在サポートしているオプションは JSON_BIGINT_AS_STRING のみです (デフォルトでは、大きな整数値を float に変換します)。

この変更は 開発版 の PHP に含まれています。 おそらく 5.3 より先のバージョンになるでしょう。
このJSON_BIGINT_AS_STRINGというオプションを指定出来れば良いのだろうけど、現在最新のPHP5.3.3でもまだ未実装だった。(まあPHPの本家マニュアルはUpdateが速いのでマニュアルで先のバージョンと言われたらそうなんだろうけど。)

0 件のコメント:

ブログ アーカイブ

カテゴリー