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

With json_encode, is there a way to force certain values not to be converted into numeric?

当使用 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(),而应在应为数字的字段上使用 intval()floatval()。换句话说,给 JSON 编码器正确的类型。然后,您不需要 JSON_NUMERIC_CHECK 来修复本应以数字开头的内容。