使用 json_encode,有没有办法强制某些值不转换为数字?
Posted
技术标签:
【中文标题】使用 json_encode,有没有办法强制某些值不转换为数字?【英文标题】:With json_encode, is there a way to force certain values not to be converted into numeric? 【发布时间】: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"
,在这种情况下它肯定行不通。
【参考方案1】:
不要在应该保留字符串的字段上使用strval()
,而是在应该是数字的字段上使用intval()
或floatval()
。换句话说,为 JSON 编码器提供正确的类型。然后,您就不需要JSON_NUMERIC_CHECK
来修复本来应该是数字的东西了。
【讨论】:
这是我最终采取的方向,使用(int)
将数字数据强制到我想要的位置。 PDO/mysql 返回所有字符串,所以不得不做点什么。以上是关于使用 json_encode,有没有办法强制某些值不转换为数字?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法强制 apache 返回 404 而不是 403?