If by "JSON string", you actually meant "object literal", then this answer will be useless. If you actually meant "JSON string", then all you need to do is create a string that can be parsed by JSON.parse()
that has all of the characteristics of a sparse array and place your sub arrays at the positions in which you need them (by whatever means you are creating the string in the first place). Take a look at this example:
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"
);
See also: http://jsfiddle.net/rwaldron/DWCEb/
Edit. As a final note, considering your statement "The catch is that not everything will have values, and I'm writing this string by hand, so I don't really want to start from 0 and do all the empty values. Is there an easy way to do this?"
The answer is: No. You cannot have your cake and eat it, too.
If you have the means to create the array with code first, then you could easily do:
var array = [];
array[1] = ["foo", "bar"];
array[5] = ["things", "stuff"];
array[37] = ["etc"];
console.log(
JSON.stringify( array )
);
See also: http://jsfiddle.net/rwaldron/RJHEp/