使用多维数组进行Stringify会得到空结果

时间:2014-04-01 14:53:46

标签: javascript json

我有一个这样的数组:

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

4 个答案:

答案 0 :(得分:5)

尝试:

d[0] = {};

而不是:

d[0] = new Array();

这种方式d[0]是一个对象,而不是一个数组。

工作示例:http://jsfiddle.net/FLDfR/

答案 1 :(得分:3)

这种情况正在发生,因为您混淆了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));

会做你想做的事。

答案 2 :(得分:0)

与Jeremy J Starcher一起,你可以完全反对它:

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

这会给你一个更好的结果,虽然技术上不是一个数组。 = /

答案 3 :(得分:0)

要制作动态属性,您可以使用[]之类的内容

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

DEMO