我有一个关于PHP json_encode函数的问题。它将数字编码为字符串,例如
array('id' => 3)
变成了
"{ ["id": "3", ...)
当js遇到这些值时,它会将它们解释为字符串,并对它们执行失败的数值操作。有谁知道防止json_encode
将数字编码为字符串的方法吗?谢谢!
发布于 2009-09-07 21:50:40
我做了一个非常快速的测试:
$a = array(
'id' => 152,
'another' => 'test',
'ananother' => 456,
);
$json = json_encode($a);
echo $json;
如果我没记错的话,这看起来就像你描述的那样?
我得到的输出是:
{"id":152,"another":"test","ananother":456}
因此,在本例中,整数尚未转换为字符串。
尽管如此,这可能取决于我们使用的PHP的版本:根据PHP的版本,已经纠正了几个与json_encode相关的错误。
这个测试是用PHP 5.2.6进行的;我在PHP 5.2.9和5.3.0上也做了同样的事情;但是我没有另一个5.2.x版本可以测试:-(
您使用的是哪个版本的PHP?或者您的测试用例比您发布的示例更复杂?
也许http://bugs.php.net/上的一个bug报告可能是相关的?例如,Bug #40503 : json_encode integer conversion is inconsistent with PHP?
也许你也会对Bug #38680感兴趣,顺便说一句?
发布于 2011-07-07 17:22:53
请注意,从PHP5.3.3开始,用于自动转换数字的there's a flag ( options参数是在PHP5.3.0中添加的):
$arr = array( 'row_id' => '1', 'name' => 'George' );
echo json_encode( $arr, JSON_NUMERIC_CHECK ); // {"row_id":1,"name":"George"}
发布于 2012-07-03 19:24:23
同样,我也是从DB (PostgreSQL)中读取数据,所有内容都是字符串。我们循环每一行并对其进行操作,以构建最终结果数组,因此我使用
$result_arr[] = array($db_row['name'], (int)$db_row['count']);
在循环内将其强制为整数值。当我现在执行json_encode($result_arr)
时,它会正确地将其格式化为数字。这使您可以控制哪些是来自数据库的数字,哪些不是。
编辑:
使用JSON_NUMERIC_CHECK
标志作为json_encode()
函数的第二个参数,它还可以动态地完成此操作。但是,您需要小心使用它,如文档中的这个用户示例所示(复制如下):http://uk3.php.net/manual/en/function.json-encode.php#106641
<?php
// International phone number
json_encode(array('phone_number' => '+33123456789'), JSON_NUMERIC_CHECK);
?>
然后你会得到这个JSON:
{"phone_number":33123456789}
https://stackoverflow.com/questions/1390983
复制相似问题