我在使用 PHP json_encode 函数时遇到了一个问题。它将数字编码为字符串,例如
array('id' => 3)
变成
"{ ["id": "3", ...)
当 js 遇到这些值时,它会将它们解释为字符串,并且数字操作会失败。有谁知道某种方法可以防止json_encode
将数字编码为字符串?谢谢!
我在使用 PHP json_encode 函数时遇到了一个问题。它将数字编码为字符串,例如
array('id' => 3)
变成
"{ ["id": "3", ...)
当 js 遇到这些值时,它会将它们解释为字符串,并且数字操作会失败。有谁知道某种方法可以防止json_encode
将数字编码为字符串?谢谢!
我,同样是从数据库(PostgreSQL)中读取,一切都是一个字符串。我们遍历每一行并使用它来构建我们的最终结果数组,所以我使用了
$result_arr[] = array($db_row['name'], (int)$db_row['count']);
在循环内强制它是一个整数值。当我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);
?>
然后你会得到这个 JSON:
{"phone_number":33123456789}
我做了一个非常快速的测试:
$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/上的一个错误报告可能与此相关?例如,错误 #40503:json_encode 整数转换与 PHP 不一致?
也许Bug #38680你也会感兴趣,顺便说一句?
尝试
$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
我遇到了同样的问题(PHP-5.2.11/Windows)。我正在使用此解决方法
$json = preg_replace( "/\"(\d+)\"/", '$1', $json );
它用数字本身替换引号中的所有(非负整数)数字('"42"' 变为 '42')。
另请参阅PHP 手册中的此注释。