32位服务器上的PHP json_decode

And*_* SK 6 php json 32-bit

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

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

这是我需要实现的:

之前(原始JSON数据)

[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]
Run Code Online (Sandbox Code Playgroud)

之后(解决方案)

[{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]
Run Code Online (Sandbox Code Playgroud)

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

CMS*_*CMS 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"}]
Run Code Online (Sandbox Code Playgroud)

这里尝试上面的例子.

  • 你会想要``id':`在那个表达中,当然?否则它将匹配任何数字序列,严重破坏任何包含数字的字符串. (2认同)
  • 是的,bobince是对的.试试`preg_replace('/"id":(\d +)/','"id":"$ 1"',$ jsonString)` (2认同)