2009-11-22 49 views
6

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

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

这就是我需要实现:

之前(原始JSON数据)(应用解决方案)

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

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

我想的preg_match实现,但我不知道如何做到防弹。任何帮助都感激不尽。

回答

12

您可以使用preg_replace捕捉数字,并添加引号,像这样:

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

试试上面的例子here

+2

你会想''id:'在那个表达式中,当然?否则,它将匹配任何数字序列,严重破坏包含数字的任何字符串。 – bobince 2009-11-22 01:08:17

+0

。它工作正常......但它会更好,如果它只会匹配“ID”附近的数字: – andufo 2009-11-22 01:11:46

+0

@bobnice:同意,编辑:) – CMS 2009-11-22 01:13:51

1

如果你使用PHP 5.2,那些长ID​​将被解析成一个浮点数,虽然这并不理想,但至少会给你21位的整数精度,这应该足以存储这些ID。 (当然,64位服务器是理想的。)

+0

运行此服务器的服务器同时具有php4和php5环境。为了激活php5我必须在.htaccess文件中设置此标志: AddType应用程序/ x-httpd-php5 .php 也许这个奇怪的设置不会让我得到int2float功能。谢谢你的信息。 – andufo 2009-11-22 01:21:02

+0

这应该可行,但你可能会唉,仍然运行PHP5的旧版本。 – bobince 2009-11-22 01:27:41

0

如果涉及到它,您可以尝试使用big_int PECL扩展。这可以让PHP使用非常大的数字,如果需要的话。这是一个很大的飞跃,但是如果你经常处理与头脑相关的边缘数字,你可能会发现它很有帮助。

相关问题