数组的数组,JSON.stringify() 给出空数组而不是整个对象
Array of Array, JSON.stringify() giving empty array instead of entire object
这是我的数组(来自 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 or Convert javascript object or array to json for ajax data 但问题依旧。
这里是重现问题的最小数量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"}
与所有 JavaScript 对象一样,数组可以具有 属性 以及您正在使用的基于字符串的键。但实际上只有整数键(或可以干净地转换为整数的键)被视为数组的元素。这就是为什么 JSON 没有捕捉到您的属性,这也是为什么您的数组都将其长度报告为零的原因。
如果你真的需要使用非整数键,你应该使用普通对象,而不是数组。此方法有其自身的陷阱 - 例如,您需要小心使用 for-in 循环 - 但 JSON 将按您期望的方式工作。
var hours = {
"Mon" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
"Tue" : {},
"Wed" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
"Thu" : {},
"Fri" : {},
"Sat" : {},
"Sun" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
}
在 javascript 中,数组的索引是数字键。 JSON.stringify 假设数组只有数字属性。
您想使用对象,因为您拥有的不是数组,而是类似于字典。
这是我做的一个例子:
http://jsfiddle.net/developerwithacaffeineproblem/pmxt8bwf/2/
object = Object()
object["age"] = 1
object["cars"] = 2
object["girlfriends"] = 3
JSON.stringify(object)
结果:
“{"age":1,"cars":2,"girlfriends":3}”
之后当你解析数据时,如果你想迭代它,你可以使用一段类似于这样的代码:
for (var key in yourobject) {
if (yourobject.hasOwnProperty(key)) {
console.log(key, yourobject[key]);
}
}
你可以使用
const newMap = JSON.parse('{}');
newMap[name] = value;
和 stingfy newMap。结果是 pars as Map
这是我的数组(来自 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 or Convert javascript object or array to json for ajax data 但问题依旧。
这里是重现问题的最小数量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"}
与所有 JavaScript 对象一样,数组可以具有 属性 以及您正在使用的基于字符串的键。但实际上只有整数键(或可以干净地转换为整数的键)被视为数组的元素。这就是为什么 JSON 没有捕捉到您的属性,这也是为什么您的数组都将其长度报告为零的原因。
如果你真的需要使用非整数键,你应该使用普通对象,而不是数组。此方法有其自身的陷阱 - 例如,您需要小心使用 for-in 循环 - 但 JSON 将按您期望的方式工作。
var hours = {
"Mon" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
"Tue" : {},
"Wed" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
"Thu" : {},
"Fri" : {},
"Sat" : {},
"Sun" : {
"11h30" : "15h00",
"18h30" : "21h30"
},
}
在 javascript 中,数组的索引是数字键。 JSON.stringify 假设数组只有数字属性。
您想使用对象,因为您拥有的不是数组,而是类似于字典。
这是我做的一个例子: http://jsfiddle.net/developerwithacaffeineproblem/pmxt8bwf/2/
object = Object()
object["age"] = 1
object["cars"] = 2
object["girlfriends"] = 3
JSON.stringify(object)
结果:
“{"age":1,"cars":2,"girlfriends":3}”
之后当你解析数据时,如果你想迭代它,你可以使用一段类似于这样的代码:
for (var key in yourobject) {
if (yourobject.hasOwnProperty(key)) {
console.log(key, yourobject[key]);
}
}
你可以使用
const newMap = JSON.parse('{}');
newMap[name] = value;
和 stingfy newMap。结果是 pars as Map