2010-04-16 1 views
4

Мне нужно знать, могут ли какие-либо реализации JSON обрабатывать разреженные массивы к моему удовлетворению. Я видел вопрос: How to represent a sparse array in JSON?, но использование объекта, а не массива, не является для меня вариантом; Мне нужен массив.Реализации JSON, которые обрабатывают разреженные массивы

Моим минимальным требованием было бы то, что реализация заполняет любые пробелы «неопределенным». В противном случае я пишу защитный код, который заполняет пробелы сам, до кодирования JSON.

ответ

5

Невозможно. Забудьте о реализации, это просто не разрешено в спецификации.

http://json.org/

Массивы определяются только значением. Объекты предназначены для того, когда значение index/key имеет значение.

+1

... и "undefined" не является значением JSON – Pointy

+0

баллов (ов); поэтому заполнит пробелы нулевым значением –

+0

Ну, проблема в том, что JSON является JSON, и нет никакого способа прямо представлять «разреженный массив», так что любой произвольный парсер JSON поймет его. Однако, если вы довольны преобразованием массива на пути «in» и «out» от JSON, тогда ответ Robusto - это то, что вы хотели бы посмотреть. – Pointy

2

Не могли бы вы использовать объект, в котором имя свойства было индексом, а значение свойства было значением, а затем запустить его через посредническую функцию для создания разреженного массива?

function getSparseArray(obj) { 
    var ary = []; 
    for (prop in obj) { 
    var i = parseInt(prop,10); 
    if (!isNaN(i)) { 
     ary[i] = obj[prop]; 
    } 
    } 
    return ary; 
} 

Вы бы послать ему что-то вроде

{ "5":"Five", "11":"Eleven", "99":"Ninety-Nine"} 

и получить обратно массив, который был заселен только с тремя значениями:

ary[5] = "Five" 
ary[11] = "Eleven" 
ary[99] = "Ninety-Nine" 
ary[0] = 'undefined' 
ary[98] = 'undefined' 
etc. 

ary здесь будет иметь длину 100, но это было бы «редким» массивом в вашем смысле.

+0

Я не думаю, что это то, о чем просили, но я согласен, что это лучший способ. Конечно, можно задаться вопросом, может ли простой массив JSON с множеством «нулевых» значений gzip доходить до чего-то меньшего! – Pointy

+0

'ary [0]' будет 'undefined', а не' null' ... – James

+0

@ J-P: Вы правы, спасибо. Отредактировано с учетом вашего комментария. – Robusto

Смежные вопросы