JavaScript 关联数组到 JSON
Posted
技术标签:
【中文标题】JavaScript 关联数组到 JSON【英文标题】:JavaScript associative array to JSON 【发布时间】:2011-05-24 10:36:22 【问题描述】:如何将 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']
相同。
【讨论】:
不正确;数组也是对象。Json.stringify
忽略数组的非数组属性。
@SLaks:我从来没有说过数组不是对象;)我只是说不能将数组用作关联数组(好吧,也许可以因为它们是对象,但我认为这变得非常丑陋和令人困惑,最终你要为宇宙的崩溃负责......)。
只是为了澄清答案:当你初始化它时使用
或new Object()
,NOT[]
或new Array()
@Thymine 的评论最有价值!请注意如何在 javascript 中初始化数据。使用 (!!!)【参考方案2】:
JavaScript 中没有关联数组。但是,有些对象具有命名属性,所以不要用new Array
初始化你的“数组”,它就会变成一个通用对象。
【讨论】:
感谢这个,简单有效!【参考方案3】:您可能希望将对象推入数组中
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);
【讨论】:
这一部分定义了关联数组?【参考方案4】:我为此here发布了一个修复程序
您可以使用此函数将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);
;
)();
【讨论】:
【参考方案5】:同意将对象保留为对象并将数组保留为数组可能是最佳实践。但是,如果您有一个带有命名属性的对象,您将其视为一个数组,那么可以这样做:
let tempArr = [];
Object.keys(objectArr).forEach( (element) =>
tempArr.push(objectArr[element]);
);
let json = JSON.stringify(tempArr);
【讨论】:
以上是关于JavaScript 关联数组到 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何将 latin1 字符集关联数组从 php 传递到 javascript?
Javascript :: 如何将关联数组的键获取到数组变量?