網站搜尋

javascript - PHP json_encode 將數字編碼為字串


我在使用 PHP 的 json_encode 函數時遇到了一個問題。它會將數字編碼為字串,例如。

array('id' => 3)

變成

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

當 JavaScript 遇到這些值時,它會將它們解釋為字串,數值運算便會失敗。有人知道有什麼方法可以防止 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) 時,它會正確地將其格式化為數字。這讓你可以控制來自資料庫的數據哪些是數字,哪些不是數字。

編輯:

json_encode() 函數也可以使用 JSON_NUMERIC_CHECK 標誌作為第二個參數來即時完成這個操作。不過你需要小心使用它,正如這位用戶在文件中的示例所示(如下複製):https://www.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}

答案#3

我做了一個非常快速的測試:

$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 #40503:json_encode 的整數轉換與 PHP 不一致?

順便問一下,也許 Bug #38680 也會引起你的興趣?