使用json_encode,有没有办法强制某些值不能转换为数字?

时间:2016-02-23 20:04:18

标签: php json scientific-notation

使用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()无效。

1 个答案:

答案 0 :(得分:2)

不应在应保留字符串的字段上使用strval(),而应在应为数字的字段上使用intval()floatval()。换句话说,为JSON编码器提供正确的类型。然后,您不需要JSON_NUMERIC_CHECK来修复应该以数字开头的内容。