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



我需要写一个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/

相关内容

  • 没有找到相关文章

最新更新