【发布时间】:2016-02-23 20:04:18
【问题描述】:
在使用 PHP (5.4/5.5) 和 json_encode() 时,我在使用 JSON_NUMERIC_CHECK 选项时遇到了一些问题。这是在生产系统上,所以我不能简单地删除该选项,因为这会改变整个响应并破坏客户端解析。
示例代码:
$var = array("id" => 1195756, "hash" => "7e12");
echo json_encode($var) . "\n";
echo json_encode($var, JSON_NUMERIC_CHECK) . "\n";
输出:
{"id":1195756,"hash":"7e12"}
{"id":1195756,"hash":7000000000000}
后者不是我想要的。 “7e12”是我们系统的有效哈希。我意识到它也是松散的科学记数法,但我怎样才能强制将值保留为字符串?
注意:使用strval() 无效。
【问题讨论】:
-
JSON_BIGINT_AS_STRING 有用吗?
-
JSON_NUMERIC_CHECK告诉它将数字字符串编码为数字,并且您正在传递一个数字字符串。唯一的选择是不使用JSON_NUMERIC_CHECK或不传递数字字符串。 -
“我得到了这个工作的 sn-p 而这个不工作的 sn-p,我怎样才能让后者工作。” - 好吧,使用第一个。
-
@Onur:不,没有区别。
-
欧努尔。这可能适用于这个特定的值,尽管我不知道这个值是否被认为足够“大”。但是具有科学记数法的整数(或看起来是具有科学记数法的整数的字符串)也可以计算为小整数值,例如
"7e2",在这种情况下它肯定行不通。
标签: php json scientific-notation