PHP json_decode on a 32bit server

2019-03-27 20:44发布

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.

标签: php 32-bit json
3条回答
爷、活的狠高调
2楼-- · 2019-03-27 21:28

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.

查看更多
【Aperson】
3楼-- · 2019-03-27 21:28

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.)

查看更多
The star\"
4楼-- · 2019-03-27 21:51

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.

查看更多
登录 后发表回答