Ассоциативный массив 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: "[]"
5 ответов:
массивы должны иметь только записи с числовыми ключами (массивы также являются объектами, но вы действительно не должны смешивать их).
если вы преобразуете массив в 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']
.
в JavaScript нет ассоциативных массивов. Однако есть объекты с именованными свойствами, поэтому просто не инициализируйте свой "массив" с помощью
new Array
, то он становится общим объектом.
согласился, что, вероятно, лучше всего хранить объекты как объекты и массивы как массивы. Однако, если у вас есть объект с именем свойства, которые вы рассматриваете как массив, вот как это можно сделать:
let tempArr = []; Object.keys(objectArr).forEach( (element) => { tempArr.push(objectArr[element]); }); let json = JSON.stringify(tempArr);
я опубликовал исправление для этого здесь
вы можете использовать эту функцию, чтобы изменить
JSON.stringify
кодированиеarrays
, просто разместите его в начале вашего скрипта (проверьте ссылку выше для более подробной информации):// 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); }; })();