这是我的阵列(来自Chrome控制台):
以下是代码的相关部分:
console.log(hours);
var data = JSON.stringify(hours);
console.log(data);
在Chrome的控制台中,我从最后一行获得[]
。我应该得到{'Mon':{...}...}
以下是重现此问题的最小JavaScript数量:
var test = [];
test["11h30"] = "15h00"
test["18h30"] = "21h30"
console.log(test);
console.log(JSON.stringify(test)); // outputs []
我尝试过其他类似的东西 Convert array to JSON或Convert javascript object or array to json for ajax data,但问题仍然存在。
答案 0 :(得分:18)
以下是重现问题的最小javascript数量
var test = [];
test["11h30"] = "15h00"
test["18h30"] = "21h30"
console.log(test);
console.log(JSON.stringify(test)); // outputs []
上面的问题是,虽然javascript很乐意让你将新属性绑定到Array
,但JSON.stringify()
只会尝试序列化数组中的实际元素。
使对象成为实际对象的最小更改,JSON.stringify
按预期工作:
var test = {}; // here is thre only change. new array ([]) becomes new object ({})
test["11h30"] = "15h00"
test["18h30"] = "21h30"
console.log(test);
console.log(JSON.stringify(test)); // outputs {"11h30":"15h00","18h30":"21h30"}
答案 1 :(得分:1)
与所有JavaScript对象一样,Arrays可以包含属性,其中包含基于字符串的键,就像您正在使用的那样。但只有整数键(或可以干净地转换为整数的键)实际上被视为数组的元素 。这就是为什么JSON没有捕获你的属性,这也是为什么你的Arrays都将它们的长度报告为零的原因。
如果你真的需要使用非整数键,你应该使用普通的对象,而不是数组。这个方法有它自己的问题 - 例如,你需要小心使用for-in循环 - 但JSON将按照你期望的方式工作。
var hours = {
"Mon" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
"Tue" : {},
"Wed" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
"Thu" : {},
"Fri" : {},
"Sat" : {},
"Sun" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
}
答案 2 :(得分:1)
在javascript数组中,索引是数字键。 JSON.stringify假定数组只有数字属性。
你想使用一个对象,因为你拥有的不是数组,而是类似于字典。
这是我做的一个例子: http://jsfiddle.net/developerwithacaffeineproblem/pmxt8bwf/2/
object = Object()
object["age"] = 1
object["cars"] = 2
object["girlfriends"] = 3
JSON.stringify(object)
结果:
“{” 年龄 “:1,” 汽车 “:2”,女朋友 “:3}”
之后解析数据时,如果要迭代它,可以使用一段与此类似的代码:
for (var key in yourobject) {
if (yourobject.hasOwnProperty(key)) {
console.log(key, yourobject[key]);
}
}
答案 3 :(得分:-1)
您可以使用
const newMap = JSON.parse('{}');
newMap[name] = value;
并控制newMap。结果是pars为Map