2014-04-01 127 views
1

我有一個這樣的數組:字符串化與多維數組給出空的結果

var d = new Array(); 
d[0] = new Array(); 
d[0]['item1'] = '123'; 
d[0]['item2'] = '456'; 
d[0]['item3'] = '789'; 
d[1] = new Array(); 
d[1]['item1'] = '123'; 
d[1]['item2'] = '456'; 
d[1]['item3'] = '789'; 

當使用console.log(JSON.stringify(d));我的控制檯日誌"[[],[]]" 爲什麼JSON.stringify()給一個空的結果?

這裏有一個jsFiddle顯示我目前的狀況

我讀this。答案是一個解決方案,但是我的屬性名稱是可變的,你可以在jsFiddle中看到。有沒有辦法讓一個屬性的名稱變量?像這樣(沒有明顯工作):

var s = 'attrName'; 
var object = { 
    s: '123' 
}// The object should have an attribute named attrName 
+0

可能重複http://stackoverflow.com/questions/5168400/issues-stringifying-a-multidimensional-array-with-json-js) – Bergi

+0

您也可以在對象上使用括號表示法。只需從'new Object()'或'{}'開始。 – Bergi

回答

2

發生這種情況,因爲你是在混淆arraysobjects.

雖然這是事實,在JavaScript中,數組只是特殊的對象,但他們的待遇有所不同。

雖然這不是在技術上是真的,假裝數組只能使用0到2^53之間的整數鍵。

// Tested in the console. 
var d = []; 
d[0] ={}; 
d[0]['item1'] = '123'; 
d[0]['item2'] = '456'; 
d[0]['item3'] = '789'; 
d[1] = {}; 
d[1]['item1'] = '123'; 
d[1]['item2'] = '456'; 
d[1]['item3'] = '789'; 

alert(JSON.stringify(d)); 

會做你想做的。

0

與傑里米ĴStarcher一起去,你可以隨便去完整的對象吧:

var data = { 
    '0': { 
     'item1': '123' 
    }, 
    '1': { 
     'item1': 'abc' 
    } 
}; 

這會給你一個更好的結果,但不是技術上的數組。 =/

0

爲了使動態屬性可以使用[]

var s = 'attrName'; 
var object = {}; 
object[s] = '123'; 

DEMO

[字符串化的問題與json.js多維數組(的