Сериализация объекта Javascript с содержащимися массивами в json? - PullRequest
2 голосов
/ 04 августа 2011

У меня есть объект javascript, который содержит несколько объектов, которые содержат ассоциативные массивы.Я пытался использовать функцию stringify библиотеки json2.js, но вывод не содержит массивов, содержащихся в членах объекта.В моем коде я начинаю с чего-то вроде

obj = {"arr1" : [], "arr2" : [], "arr3" : []};

, затем добавляю к нему циклы, которые заполняют каждый из содержащихся массивов

obj[arr*].push[arritem*];
obj[arr*][arritem*] = something;

Arr * и arritem *, которые я вставляюпросто чтобы представить переменную, которую я вставляю для циклов.Я пробую Json.stringify (obj), но возвращаемая строка:

'{"arr1" : [0], "arr2" : [0], "arr3" : [0]}'

Я хотел бы увидеть результат как

'{"arr1" : [ "arritem1" : something, "arritem2" : something2], "arr2" : [ "arritem1" : something, "arritem2" : something2], "arr3" : [ "arritem1" : something, "arritem2" : something2]}'

, есть ли лучшая библиотека для этого илиЕсть ли что-то, что я должен сделать перед тем, как улизнуть?

Ответы [ 2 ]

4 голосов
/ 04 августа 2011
var obj = {"arr1" : [], "arr2" : [], "arr3" : []};
console.log(JSON.stringify(obj));

У меня работает.

Заполнение массивов тоже работает .


Обновление

Вы подразумеваете, что пытаетесь добавить элементы с нечисловыми ключами в массивы.

Это недействительно. В частности, ваш желаемый вывод - , а не действительный JSON. Массивы имеют только числовые ключи, и они не включены в сам JSON, поскольку они неявно, последовательно определены.

Массивы - это особый тип объектов, который обрабатывает числовые индексы для вас.

var arr = [];   // Create array.
arr.push(1);    // There is now one element, with index 0 and value 1.
arr["txt"] = 2; // You tried to create a new element,
                // but didn't use .push and gave a non-numeric key.
                // This broke your array.

console.log(JSON.stringify(arr));
// Output: [1]

Живая демоверсия.

Короче говоря ... не делай этого. Если вам нужен «ассоциативный массив», придерживайтесь базовых объектов:

var obj    = {}; // Create object.
obj[0]     = 1;  // There is now one element, with key "0" and value 1.
obj["txt"] = 2;  // There is now a second element, with key "txt" and value 2.

console.log(JSON.stringify(arr));
// Output: {"0":1,"txt":2}

Живая демоверсия.

0 голосов
/ 04 августа 2011
obj.toSource()

это преобразует ваш массив в исходную строку.

...