Ассоциативный массив JavaScript для JSON
Как преобразовать ассоциативный массив JavaScript в JSON?
Я пробовал следующее:
var AssocArray = new Array();
AssocArray["a"] = "The letter A"
console.log("a = " + AssocArray["a"]);
// result: "a = The letter A"
JSON.stringify(AssocArray);
// result: "[]"
Ответы
Ответ 1
Массивы должны иметь только записи с числовыми ключами (массивы также являются объектами, но вы не должны их смешивать).
Если вы преобразуете массив в JSON, процесс будет учитывать только числовые свойства. Другие свойства просто игнорируются и поэтому вы получаете пустой массив. Возможно, это более очевидно, если вы посмотрите на length
массива:
> AssocArray.length
0
То, что часто называют "ассоциативным массивом", на самом деле является просто объектом в JS:
var AssocArray = {}; // <- initialize an object, not an array
AssocArray["a"] = "The letter A"
console.log("a = " + AssocArray["a"]); // "a = The letter A"
JSON.stringify(AssocArray); // "{"a":"The letter A"}"
Доступ к свойствам объектов можно получить с помощью нотации или точечной нотации массива (если ключ не является зарезервированным ключевым словом). Таким образом, AssocArray.a
совпадает с AssocArray['a']
.
Ответ 2
В JavaScript нет ассоциативных массивов. Тем не менее, есть объекты с именованными свойствами, поэтому просто не инициализируйте свой "массив" с помощью new Array
, затем он станет универсальным объектом.
Ответ 3
Согласился, что, вероятно, лучше всего хранить объекты как объекты и массивы в виде массивов. Однако, если у вас есть объект с именованными свойствами, который вы рассматриваете как массив, вот как это можно сделать:
let tempArr = [];
Object.keys(objectArr).forEach( (element) => {
tempArr.push(objectArr[element]);
});
let json = JSON.stringify(tempArr);
Ответ 4
Я разместил исправление для этого здесь
Вы можете использовать эту функцию для изменения JSON.stringify
для кодирования arrays
, просто разместите ее рядом с началом вашего script (подробнее см. ссылку выше):
// Upgrade for JSON.stringify, updated to allow arrays
(function(){
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
};
var oldJSONStringify = JSON.stringify;
JSON.stringify = function(input){
if(oldJSONStringify(input) == '[]')
return oldJSONStringify(convArrToObj(input));
else
return oldJSONStringify(input);
};
})();
Ответ 5
Вы можете нажать объект в массив
enter code here
var AssocArray = new Array();
AssocArray.push( "The letter A");
console.log("a = " + AssocArray[0]);
// result: "a = The letter A"
console.log( AssocArray[0]);
JSON.stringify(AssocArray);