2014-04-01 128 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多维数组(的