2011-08-04 35 views
2

我有一個JavaScript對象,其中包含一些包含關聯數組的對象。我一直在嘗試使用json2.js庫的stringify函數,但輸出不包含包含在對象成員中的數組。 在我的代碼我開始像這樣將包含數組的Javascript對象序列化爲json?

obj = {"arr1" : [], "arr2" : [], "arr3" : []}; 

然後我添加到它與填充每個所包含的陣列

obj[arr*].push[arritem*]; 
obj[arr*][arritem*] = something; 

的ARR *和循環arritem *我把剛纔代表我正在爲循環放入變量。 我嘗試Json.stringify(OBJ),但我的字符串得到的回覆是

'{"arr1" : [0], "arr2" : [0], "arr3" : [0]}' 

我想看到的輸出中的

'{"arr1" : [ "arritem1" : something, "arritem2" : something2], "arr2" : [ "arritem1" : something, "arritem2" : something2], "arr3" : [ "arritem1" : something, "arritem2" : something2]}' 

有一個更好的庫這或者是有什麼我必須在嚴格之前做?

+0

你能提供更精確的輸入/輸出的例子嗎?你的確有矛盾。 –

回答

4
var obj = {"arr1" : [], "arr2" : [], "arr3" : []}; 
console.log(JSON.stringify(obj)); 

Works for me.

充填陣列works too


更新

你意味着你正在嘗試添加非數字鍵數組中的元素。

這是無效的。特別是,您所需的輸出是而不是有效的JSON。數組只有只有數字鍵,並且它們不包含在JSON本身中,因爲它們是按順序定義的。

數組是一種特殊類型的Object,它爲您處理數字索引。

var arr = []; // Create array. 
arr.push(1); // There is now one element, with index 0 and value 1. 
arr["txt"] = 2; // You tried to create a new element, 
       // but didn't use .push and gave a non-numeric key. 
       // This broke your array. 

console.log(JSON.stringify(arr)); 
// Output: [1] 

Live demo.

長話短說......不這樣做。如果你想要一個「關聯數組」,堅持基本對象:

var obj = {}; // Create object. 
obj[0]  = 1; // There is now one element, with key "0" and value 1. 
obj["txt"] = 2; // There is now a second element, with key "txt" and value 2. 

console.log(JSON.stringify(arr)); 
// Output: {"0":1,"txt":2} 

Live demo.

+0

它在數組關聯時沒有工作 – gman060692

+0

@ gman060692:Javascript沒有關聯數組。它有對象;對象的一個​​子集是[數字索引]數組。如果您試圖將非數字鍵推入數組中,那麼這就是您的問題。 –

+0

非數字鍵在我的javascript代碼中引用數組項時工作正常,也許firefox可以處理JavaScript中的關聯數組,但stringify函數不能。或者它只是創建分層對象而不是數組。 – gman060692

0
obj.toSource() 

這會將您的數組轉換爲源字符串。

+0

我在Chrome中似乎沒有這個功能? – Kos

相關問題