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 也會引起你的興趣?
