PHP json_encode数字编码为字符串

2022-08-30 02:27:29

我在PHP json_encode函数中遇到了一个问题。它将数字编码为字符串,例如

array('id' => 3)

成为

"{ ["id": "3", ...)

当 js 遇到这些值时,它会将它们解释为字符串,并且对它们进行数值运算失败。有谁知道一些防止将数字编码为字符串的方法吗?谢谢!json_encode


答案 1

请注意,从 PHP 5.3.3 开始,有一个用于自动转换数字的标志(options 参数是在 PHP 5.3.0 中添加的):

$arr = array( 'row_id' => '1', 'name' => 'George' );
echo json_encode( $arr, JSON_NUMERIC_CHECK ); // {"row_id":1,"name":"George"}

答案 2

我,同样从数据库(PostgreSQL)读取,一切都是一个字符串。我们循环遍历每一行,并用它做一些事情来构建我们的最终结果数组,所以我使用了

$result_arr[] = array($db_row['name'], (int)$db_row['count']);

在循环中强制其为整数值。当我现在这样做时,它正确地将其格式化为数字。这使您可以控制来自数据库的数字,什么不是数字。json_encode($result_arr)

编辑:

该函数还能够使用标志作为其第二个参数来动态执行此操作。您需要小心使用它,但如文档中的此用户示例所示(复制如下):http://uk3.php.net/manual/en/function.json-encode.php#106641json_encode()JSON_NUMERIC_CHECK

<?php
// International phone number
json_encode(array('phone_number' => '+33123456789'), JSON_NUMERIC_CHECK);
?>

然后你得到这个JSON:

{"phone_number":33123456789}