2009-11-22 59 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使用非常大的數字,如果需要的話。這是一個很大的飛躍,但是如果你經常處理與頭腦相關的邊緣數字,你可能會發現它很有幫助。

相關問題