JavaScript关联数组到JSON

Act*_*Owl 75 javascript json associative-array

如何将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: "[]"
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 139

数组应该只有数字键的条目(数组也是对象,但你真的不应该混合它们).

如果将数组转换为JSON,则该过程仅考虑数值属性.其他属性被简单地忽略,这就是为什么你得到一个空数组的结果.如果你看一下length数组,也许这更明显:

> AssocArray.length
0
Run Code Online (Sandbox Code Playgroud)

通常所说的"关联数组"实际上只是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"}"
Run Code Online (Sandbox Code Playgroud)

可以通过数组表示法或点表示法访问对象的属性(如果键不是保留关键字).因此AssocArray.a是一样的AssocArray['a'].

  • 只是为了澄清答案:当你初始化它时使用`{}`或`new Object()`,**NOT**`[]`或`new Array()` (12认同)
  • @SLaks:我从来没有说数组不是对象;)我只是说一个人不能使用数组作为关联数组(好吧可能有人可以*因为*他们*是*对象,但我认为这真的很丑陋和令人困惑最后,你应对宇宙的崩溃负责......). (9认同)
  • 不正确; 数组也是对象.`Json.stringify`忽略数组的非数组属性. (3认同)

And*_*eKR 7

JavaScript中没有关联数组.但是,有一些具有命名属性的对象,所以只是不要初始化你的"数组" new Array,然后它就变成了一个通用对象.


小智 5

同意将对象保留为对象并将数组保留为数组可能是最佳实践。但是,如果您有一个带有命名属性的对象并将其视为数组,则可以这样做:

let tempArr = [];
Object.keys(objectArr).forEach( (element) => {
    tempArr.push(objectArr[element]);
});

let json = JSON.stringify(tempArr);
Run Code Online (Sandbox Code Playgroud)