PHP json_decode on a 32bit server

你。 提交于 2020-01-01 05:18:09

问题


im writting a twitter mashup service. When i receive the json data, some of the twit ids are greater than 2147483647 (which is the maximum allowed integer on 32bit servers).

I came up with a solution that works, which is converting the integers to strings; that way the json_decode() function won't have any problems when trying to generate the array.

This is what i need to achieve:

Before (original JSON data)

[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]

After (solution applied)

[{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]

I'm thinking of a preg_match implementation, but i have no idea on how to do it bullet-proof. Any help will be much appreciated.


回答1:


You can use preg_replace to capture the numbers and add the quotes, something like this:

$jsonString = '[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]';

echo preg_replace('/("\w+"):(\d+)/', '\\1:"\\2"', $jsonString);
//prints [{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]

Try the above example here.




回答2:


If you use PHP 5.2 those long ids will be parsed into a float, which though not ideal at least gives you another 21 bits of integer precision, which should easily be enough to store those ids. (A 64-bit server would be ideal of course.)




回答3:


If it comes down to it, you can attempt to use the big_int PECL extension. This lets PHP use numbers that are extraordinarily large, should you need to. It's a big leap, but if you're routinely dealing with numbers that border on the edge of mindnumbingness, you'll likely find it helpful.



来源:https://stackoverflow.com/questions/1777382/php-json-decode-on-a-32bit-server

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!