2012-02-10 190 views
1

我正在編寫一個在node.js中的API,它從數據庫中提取數據,對其進行處理並將其發送出去以供使用。如何防止在對對象進行字符串化時對數字進行字符串化?

我有一個對象,看起來像這樣:

{ 
    2734899508: "Chicken", 
    2843594878: "Fish" 
} 

當我打電話JSON.stringify,並通過上述的目的,我得到這個:

{ 
    "2734899508": "Chicken", 
    "2843594878": "Fish" 
} 

我想一個字符串,其中數字鍵不會變成字符串。我該怎麼做呢?

+0

如果你想使用JSON,你將不得不忍受它。 – kapa 2012-02-10 11:51:59

回答

0

你可以測試每個鍵/值是否爲字符串化的整數這樣的:

if(parseInt(value)==value) { 
    value = parseInt(value); 
} 

注意:這裏故意,而不是使用===因爲==我們既想強迫字符串。

但是,如果您的知道哪些鍵/值是字符串化的int,那麼您可以只做中間一行來修復它們。

我會指出,如果你將這個json發送到瀏覽器或其他javascript客戶端,除非你總是使用===,否則無論你是int還是string都不會有什麼區別。

+0

如果它對瀏覽器沒有影響,那麼我就可以使用字符串了。 – 2012-02-10 18:44:32

1

作爲對象鍵的數字不被支持,它們將被轉換爲一個字符串鍵,你有我猜數字的錯覺,因爲當你做myObj [2843594878]它返回正確的值,但在訪問器上它也是將其轉換爲字符串。

console.log(typeof(Object.keys(myObj)[0])); 
1

引用的JSON syntax你會發現,這些數字鍵是從string: value對事實的字符串:

您可以在此之前系列化的驗證。解析器是寬鬆的,並將它們轉換爲string

作爲對象的符號,你的標識被一些將是有點奇怪,無論如何,例如,如果你有一個對象myFridge,這將是一些等價的:

myFridge.2734899508 = "Chicken" // WRONG 

但是,可以仍然使用括號語法,正如其他人指出:

myFridge["2734899508"] = "Chicken" 

你可以考慮其他的東西像陣列嚴格保持數字,例如:

{ 
fridgeItems: 
[ 
    [ 2734899508, "Chicken" ], 
    [ 2843594878, "Fish" ] 
] 
} 

可能代表您的數據好一點。

相關問題