我需要写一个JSON字符串,它将被解释为一个数组,但只有某些索引实际上有任何值。
我想要一个这样的数组:
array[1] = ["foo", "bar"]
array[5] = ["things", "stuff"]
array[37] = ["etc"];
为了返回"stuff"我可以调用array[5][1]
需要注意的是,并不是所有内容都有值,而且我是手工编写这个字符串,所以我不想从0开始执行所有的空值。有简单的方法吗?
数据结构的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"]};
如果通过"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/