Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
32位服务器上的PHP json_解码_Php_32 Bit_Json - Fatal编程技术网

32位服务器上的PHP json_解码

32位服务器上的PHP json_解码,php,32-bit,json,Php,32 Bit,Json,我正在写一个twitter mashup服务。当我收到json数据时,一些twit ID大于2147483647(这是32位服务器上允许的最大整数) 我想出了一个有效的解决方案,就是将整数转换成字符串;这样,json_decode()函数在尝试生成数组时就不会有任何问题 这就是我需要实现的目标: 之前(原始JSON数据) 之后(应用溶液) 我正在考虑preg_match的实现,但我不知道如何做到防弹。任何帮助都将不胜感激。您可以用它来捕获数字并添加引号,如下所示: $jsonString = '

我正在写一个twitter mashup服务。当我收到json数据时,一些twit ID大于2147483647(这是32位服务器上允许的最大整数)

我想出了一个有效的解决方案,就是将整数转换成字符串;这样,json_decode()函数在尝试生成数组时就不会有任何问题

这就是我需要实现的目标:

之前(原始JSON数据)

之后(应用溶液)

我正在考虑preg_match的实现,但我不知道如何做到防弹。任何帮助都将不胜感激。

您可以用它来捕获数字并添加引号,如下所示:

$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"}]

试试上面的例子。

如果您使用PHP5.2,那么这些长ID将被解析为一个浮点数,虽然这并不理想,但至少会为您提供另外21位的整数精度,这应该足以轻松存储这些ID。(64位服务器当然是理想的。)

如果归结起来,您可以尝试使用
big_int
PECL扩展。这使得PHP可以在需要时使用非常大的数字。这是一个巨大的飞跃,但如果你经常处理那些近乎麻木的数字,你可能会发现它很有用。

你会想要
“id”:
在这个表达式中,当然?否则它将匹配任何数字序列,严重破坏任何包含数字的字符串。它很好用。。。但如果它只匹配“id”附近的数字就更好了:事实上。。。如果有“name”:“junior2”,它将变成“junior2”,代码是:sYeah,bobince是对的。尝试
preg\u replace('/“id”:(\d+/”,““id”:“$1”,$jsonString)
Thx。我认为一些旧的PHP版本可能有这个问题,而新的版本则没有。因为我在一台机器上得到了一个可以工作的json_解码,但至少不是PHP5.2.3的机器。但是上面的解决方案是有效的!运行此操作的服务器同时具有php4和php5环境。为了激活php5,我必须在.htaccess文件中设置这个标志:AddType application/x-httpd-php5.php也许这个奇怪的设置不会让我获得int2float特性。不过,谢谢你提供的信息。这应该行得通,不过,唉,你可能还在运行旧版本的PHP5。
[{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]
$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"}]