我需要编写一个将被解释为数组的JSON字符串,但只有某些索引实际上会有任何值。
我想要一个看起来像这样的数组:
array[1] = ["foo", "bar"]
array[5] = ["things", "stuff"]
array[37] = ["etc"];
为了返回“东西”,我可以致电array[5][1]
。
问题是,并非所有东西都有值,我正在手写这个字符串,所以我真的不想从0开始并执行所有空值。有一个简单的方法吗?
答案 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 )
);