【发布时间】:2016-05-19 21:33:24
【问题描述】:
我正在编写一个 API。 API 始终返回 JSON。在内部,响应数据是一个转换为 JSON 的数组,如下所示:
<?php
function toJson($responseData) {
return json_encode($responseData, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);
}
这确保数字在 JSON 中表示为整数(而不是字符串)。 99.9% 的时间,这很好用。但是,它会在以下情况下死亡:
<?php
toJson(array('color' => '1e3673'));
它死掉的原因是 PHP 认为“1e3673”是科学计数法的数字,并将其转换为整数。但是这个整数太大了,最后被表示为+INF,无法用JSON表示。所以 json_encode 完全失败了。
我该如何正确处理这种情况?看来我的选择是
- 不知何故告诉 PHP “1e3673”不是一个数字。
- 停止使用 JSON_NUMERIC_CHECK。这将使 API 与许多语言(例如 Javascript)一起使用时真的很烦人,并且似乎是处理这种狭隘极端情况的糟糕方法。
- 编写我自己的 JSON 编码器来避免这个问题。
我更喜欢#1,但如果有必要,我愿意接受#3。或者也许还有其他方法?
【问题讨论】:
-
4.将颜色表示为
#1e3673或0x1e3673。 -
2!您必须能够使用"00012"或"11.09"字符串进行响应。只需检查您的方法以响应正确的类型。 -
我无法在这里重现“垂死”。 PHP 5.6 和 7.0 都按我的预期工作。
-
我也没有。sandbox.onlinephpfunctions.com/code/… 返回
{"color": "1e3673"}。 -
显然这是在 5..6.2 和 5.6.17 之间的某个时间修复的。所以我想真正的解决方案是“更新我的 PHP”。感谢您指出这一点:-)