当前位置: 首页 > 面试题库 >

如何解决或使PHP json_decode不更改我的很大整数值?

薄烨
2023-03-14
问题内容

所以我在WAMP环境中使用php 5.2.6。

我正在尝试使用json_decode函数将json字符串转换为数组。JSON来自其他地方的REST
API,因此我无法控制JSON字符串的格式。这是我尝试使用的json字符串之一的示例:

[{
    "webinarKey":795855906,
    "sessionKey":100000000041808257,
    "startTime":"2011-12-16T13:56:15Z",
    "endTime":"2011-12-16T14:48:37Z",
    "registrantsAttended":2
}]

我特别是在这里sessionKey值之后。PHP将值视为浮点型,我似乎无法执行任何操作来检索原始值。

我尝试了以下方法:

json_decode($json, true, 512, JSON_BIGINT_AS_STRING);
# This produces the following error because my php version isn't up to snuff and I
# can't upgrade to the version required
# Warning: json_decode() expects at most 2 parameters, 4 given

我也尝试过这个:

$json_obj = json_decode($json, true);
number_format($json_obj[0]["sessionKey"], 0, '.', '');
# This results in precision issues where the value was 100000000041808257
# but is number_formated out as 100000000041808256

正如我所说,升级到php 5.4(支持4参数json_decode调用)不是一种选择。请帮忙!

谢谢!


问题答案:

谢谢@Scott Gottreu和@pospi。

答案是在最后评论中关于该问题的公认答案。

使用preg_replace()函数将所有整数值都用引号引起来。

json_decode(preg_replace('/("\w+"):(\d+)/', '\\1:"\\2"', $jsonString), true);

实际上,在测试了上述代码后,它使用浮点数将JSON固定为值,为解决该问题,我使用以下内容将所有数字(整数或浮点数)括在引号中:

json_decode(preg_replace('/("\w+"):(\d+(\.\d+)?)/', '\\1:"\\2"', $jsonString), true);


 类似资料:
  • 我是编程新手,目前使用JavaFX作为个人组织工具。我在这里展示了一个按钮(称为book)和阶段(称为bookStages)的数组列表,一个名为addBook的VBox,以及一个名为bookButtonCount的Int设置为0。 第一个按钮将“书籍”数组列表中的一个按钮添加到VBox。vbox中的按钮应该从舞台数组列表中打开一个阶段。您应该能够多次触发该按钮,每次向vbox添加一个新按钮并将该按

  • 我的网页截图 我的视区: 我的CSS: 该网站很适合屏幕宽度达到450px。但是当我更多地降低屏幕尺寸时,网页似乎变得越来越小,而不是实际的屏幕尺寸。 366px下的网页截图

  • 如何将JComboBox项更改为整数 这是我如何使JComboBox和它是不可编辑的,我如何编辑它?

  • 问题内容: 运行gui时,我必须调整窗口大小以显示所有内容。有人知道问题出在哪里吗? 问题答案: 在添加所有组件之后并在调用setVisible(true)之前,在JFrame上调用pack()。

  • 问题内容: 我正在写一个小程序,用户必须猜一个数字。我希望他们输入他们正在猜测的数字,然后将玩家插入的值分配给变量x,以检查这是否是正确的值。如何获取插入的值并将其分配给x变量? 这是我到目前为止所拥有的: 问题答案: 这是一个简单的解决方案。将其环绕一段时间并始终设置

  • 问题内容: 我想在字典中弹出所有较大的值及其键,并保持最小的值。这是我程序的一部分 导致 如何避免此错误? 问题答案: 替代解决方案 如果您正在寻找字典中的最小值,则可以执行以下操作: 如果不能使用min,则可以使用sorted: 为什么会出现此错误? 附带说明一下,您遇到的原因是,在内部循环中您修改了外部循环所基于的迭代器。当您尚未由外部循环访问的条目并且外部迭代器到达该条目时,它将尝试访问已删