Как передать код массива в строку JSON? - PullRequest
1 голос
/ 30 августа 2011

Мне нужно написать строку JSON, которая будет интерпретироваться как массив, но на самом деле только определенные индексы будут иметь какие-либо значения.

Я бы хотел массив, который выглядит следующим образом:

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

Чтобы вернуть «материал», я мог бы позвонить array[5][1].

Загвоздка в том, что не все будут иметь значения, и я пишу эту строку вручную, поэтому я не хочу начинать с 0 и делать все пустые значения. Есть ли простой способ сделать это?

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

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"]};
3 голосов
/ 30 августа 2011

Если под «строкой 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...