2

我有一个 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]}'

有没有更好的图书馆,或者在精简之前我需要做些什么?

4

2 回答 2

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

为我工作。

填充数组也可以


更新

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

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

数组是一种特殊类型的对象,它为您处理数字索引。

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]

现场演示。

长话短说...不要这样做。如果您想要一个“关联数组”,请坚持使用基本对象:

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}

现场演示。

于 2011-08-04T15:12:40.800 回答
0
obj.toSource()

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

于 2011-08-04T15:05:58.537 回答