[个人原创]php5.4以前版本的json_encode函数不支持BIGINT的问题及解决方案

jackxiang 2011-9-8 11:44 | |
php json_encode函数不支持BIGINT的问题
新浪微博的32位id,twitter的id过大超过BIGINT也遇到类似的问题,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.
php好像不分类型但它也依赖于CPU位数,但mysql bigint  范围 -9223372036854775808 到 9223372036854775807

在新的php(5.4版本) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.
而我们的实际情况是,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本,只好采取一个折中
办法:
把微博API返回的json字符串预处理一下,然后再调用json_decode.
也就是把

换成string的类型:

代码片段如下,希望对和我类似情况的人有用.


截取部分实验了一把,如下:

运行如下:

Json中id这个给转成了sting,输出正常,而e这个json的键值,给当成了浮点数,输出为:

通过var_dump查其类型分别如下:


参考:http://drupal.org/node/985544

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/4612/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2011-9-8 12:36
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]