使用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()无效。
答案 0 :(得分:2)
不应在应保留字符串的字段上使用strval()
,而应在应为数字的字段上使用intval()
或floatval()
。换句话说,为JSON编码器提供正确的类型。然后,您不需要JSON_NUMERIC_CHECK
来修复应该以数字开头的内容。