【问题标题】:How do I properly json_encode ["number" => 12, "color" => "1e3673"] in PHP?如何在 PHP 中正确地 json_encode ["number" => 12, "color" => "1e3673"]?
【发布时间】: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 完全失败了。

我该如何正确处理这种情况?看来我的选择是

  1. 不知何故告诉 PHP “1e3673”不是一个数字。
  2. 停止使用 JSON_NUMERIC_CHECK。这将使 API 与许多语言(例如 Javascript)一起使用时真的很烦人,并且似乎是处理这种狭隘极端情况的糟糕方法。
  3. 编写我自己的 JSON 编码器来避免这个问题。

我更喜欢#1,但如果有必要,我愿意接受#3。或者也许还有其他方法?

【问题讨论】:

  • 4.将颜色表示为#1e36730x1e3673
  • 2!您必须能够使用"00012""11.09" 字符串进行响应。只需检查您的方法以响应正确的类型。
  • 我无法在这里重现“垂死”。 PHP 5.6 和 7.0 都按我的预期工作。
  • 我也没有。sandbox.onlinephpfunctions.com/code/… 返回{"color": "1e3673"}
  • 显然这是在 5..6.2 和 5.6.17 之间的某个时间修复的。所以我想真正的解决方案是“更新我的 PHP”。感谢您指出这一点:-)

标签: php json


【解决方案1】:

原来这是一个错误,已在 5.5.23+、5.6.7+、7.0+ 版本中修复。

https://3v4l.org/aHt34

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多