Chr*_*ill 132 javascript php json
我有一个PHP json_encode函数的问题.它将数字编码为字符串,例如
array('id' => 3)
Run Code Online (Sandbox Code Playgroud)
变
"{ ["id": "3", ...)
Run Code Online (Sandbox Code Playgroud)
当js遇到这些值时,它会将它们解释为字符串,并且数值操作会失败.有谁知道一些方法来防止json_encode
编码数字作为字符串?谢谢!
Rij*_*ijk 328
请注意,自PHP 5.3.3起,有一个自动转换数字的标志(在PHP 5.3.0中添加了options参数):
$arr = array( 'row_id' => '1', 'name' => 'George' );
echo json_encode( $arr, JSON_NUMERIC_CHECK ); // {"row_id":1,"name":"George"}
Run Code Online (Sandbox Code Playgroud)
mou*_*ron 35
我,同样是从DB(PostgreSQL)读取,一切都是字符串.我们遍历每一行并使用它来构建我们的最终结果数组,所以我使用了
$result_arr[] = array($db_row['name'], (int)$db_row['count']);
Run Code Online (Sandbox Code Playgroud)
在循环内强制它为整数值.当我json_encode($result_arr)
现在这样做时,它正确地将其格式化为数字.这允许您控制来自数据库的数字和不是数字.
编辑:
该json_encode()
函数还可以使用JSON_NUMERIC_CHECK
标志作为第二个参数来动态执行此操作.您需要小心使用它,但如文档中的此用户示例所示(复制如下):http://uk3.php.net/manual/en/function.json-encode.php#106641
<?php
// International phone number
json_encode(array('phone_number' => '+33123456789'), JSON_NUMERIC_CHECK);
?>
Run Code Online (Sandbox Code Playgroud)
然后你得到这个JSON:
{"phone_number":33123456789}
Run Code Online (Sandbox Code Playgroud)
Pas*_*TIN 28
我做了一个非常快速的测试:
$a = array(
'id' => 152,
'another' => 'test',
'ananother' => 456,
);
$json = json_encode($a);
echo $json;
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错的话,这似乎就像你描述的那样?
我得到了输出:
{"id":152,"another":"test","ananother":456}
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,整数尚未转换为字符串.
不过,这可能取决于我们使用的PHP版本:已经纠正了几个与json_encode相关的错误,具体取决于PHP的版本...
这个测试是用PHP 5.2.6完成的; 我在PHP 5.2.9和5.3.0中得到了同样的东西; 我没有另外的5.2.x版本来测试,但:-(
您使用的是哪个版本的PHP?或者您的测试用例比您发布的示例更复杂?
也许http://bugs.php.net/上的一个错误报告可能有关系?例如,Bug#40503:json_encode整数转换与PHP不一致?
也许Bug#38680也会引起你的兴趣,顺便问一下?
我遇到了同样的问题(PHP-5.2.11/Windows).我正在使用此解决方法
$json = preg_replace( "/\"(\d+)\"/", '$1', $json );
Run Code Online (Sandbox Code Playgroud)
它用数字本身替换用引号括起的所有(非负数,整数)数字('"42"'变成'42').
另请参阅PHP手册中的此注释.
小智 7
尝试
$arr = array('var1' => 100, 'var2' => 200);
$json = json_encode( $arr, JSON_NUMERIC_CHECK);
但它只适用于PHP 5.3.3.看看这个PHP json_encode更改日志 http://php.net/manual/en/function.json-encode.php#refsect1-function.json-encode-changelog