如何将数组手动编码为JSON字符串?

时间:2011-08-30 19:40:34

标签: javascript json multidimensional-array

我需要编写一个将被解释为数组的JSON字符串,但只有某些索引实际上会有任何值。

我想要一个看起来像这样的数组:

array[1] = ["foo", "bar"]
array[5] = ["things", "stuff"]
array[37] = ["etc"];

为了返回“东西”,我可以致电array[5][1]

问题是,并非所有东西都有值,我正在手写这个字符串,所以我真的不想从0开始并执行所有空值。有一个简单的方法吗?

2 个答案:

答案 0 :(得分:5)

您的数据结构的JSON表示......

var data = {"1":{"0":"foo","1":"bar"},"5":{"0":"things","1":"stuff"},"37":{"0":"etc"}};

或只是......

var data = {"1":["foo","bar"],"5":["things","stuff"],"37":["etc"]};

答案 1 :(得分:3)

如果通过“JSON字符串”,你实际上意味着“对象文字”,那么这个答案将毫无用处。如果您实际上是指“JSON字符串”,那么您需要做的就是创建一个可以由JSON.parse()解析的字符串,该字符串具有稀疏数组的所有特征,并将子数组放在您的位置需要它们(通过任何方式你首先创建字符串)。看一下这个例子:

var array, 
    json = '[ null, ["foo", "bar"], null, null, null, ["things", "stuff"], ' + 
            'null, null, null, null, null, null, null, null, null, null, ' + 
            'null, null, null, null, null, null, null, null, null, null, ' + 
            'null, null, null, null, null, null, null, null, null, null, ' + 
            'null, ["etc"]  ]';


array = JSON.parse( json );

console.log(
    array[ 1 ][ 1 ] // "bar"
);

console.log(
    array[ 5 ][ 1 ] // "stuff"
);

console.log(
    array[ 37 ][ 0 ] // "etc"
);

另请参阅:http://jsfiddle.net/rwaldron/DWCEb/

编辑。作为最后一点,请考虑你的陈述“抓住的是,并非所有东西都有价值,我手写这个字符串,所以我真的不想开始从0开始并完成所有空值。是否有一种简单的方法可以做到这一点?“

答案是:不。你也不能吃蛋糕。

如果你有办法首先使用代码创建数组,那么你可以很容易地做到:

var array = [];

array[1] = ["foo", "bar"];
array[5] = ["things", "stuff"];
array[37] = ["etc"];

console.log(
    JSON.stringify( array )
);

另请参阅:http://jsfiddle.net/rwaldron/RJHEp/