将包含数组的Javascript对象序列化为json?

时间:2011-08-04 15:01:56

标签: javascript arrays json associative stringify

我有一个javascript对象,其中包含一些包含关联数组的对象。我一直在尝试使用json2.js库的stringify函数,但输出不包含所包含的对象成员中保存的数组。 在我的代码中,我从这样的东西开始

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]}'

是否有一个更好的图书馆或者在进行strinfying之前我还需要做些什么?

2 个答案:

答案 0 :(得分:4)

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

Works for me.

填充数组works too


<强>更新

您暗示您正在尝试将具有非数字键的元素添加到数组中。

这是无效的。特别是,您所需的输出是有效的JSON。数组只有 数字键,它们不包含在JSON本身中,因为它们是隐式的,顺序定义的。

Arrays是一种特殊类型的Object,它为您处理 numeric 索引。

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.

答案 1 :(得分:0)

obj.toSource()

这会将您的数组转换为源字符串。