var map1= new Map();
map1.set("one",1);
var map2 = new Map();
map2.set("two",2);
concatMap = {};
concatMap['one']= map1;
concatMap['two']= map2;
JSON.stringify(concatMap);
//输出:" {"一个":{},"两个":{}}"
我也尝试过:
concatMap = {};
concatMap.one= map1;
concatMap.two= map2;
为什么我在使用JSON.stringify()时获取空对象而不是map 1和map 2?
答案 0 :(得分:5)
这是预期的结果。 JSON.stringify
无法将Map对象识别为与常规对象不同的内容,并且JSON规范本身无法正确存储Map。它只是将地图视为常规对象,可能包括在其上设置的任何自己的对象属性。
var m = new Map();
// This is not included:
m.set('test', 123);
// This would be included:
m['other'] = 456;
console.log(JSON.stringify(m));

如果您只是使用字符串键,则可以使用常规对象而不是Map。
答案 1 :(得分:1)
您可以使用
const newMap = JSON.parse('{}');
newMap[name] = value;
并控制newMap。结果是pars为Map
答案 2 :(得分:1)
感谢 Tim Brown 在他关于该主题的 blog post - 当 Map 对象的内容可序列化时,您可以这样做:
将映射序列化为 JSON:
JSON.stringify(Array.from(map.entries()))
将 JSON 反序列化为 Map:
new Map(JSON.parse(jsonStr))
答案 3 :(得分:0)
您可以使用map1 = {"one", 1}
代替地图对象。
以下是工作人员:https://plnkr.co/edit/mUP5KbTVCo0JgdlqH1qQ?p=preview
答案 4 :(得分:0)
正如其他人所说,JSON尚未支持地图。但是2d数组是可以做到的:
const map1= new Map().set("one",1),
map2 = new Map().set("two",2),
concatMap = {
one:[...map1],
two:[...map2]
};
const result = JSON.stringify(concatMap);
要解析它,请执行:
let {one,two} = JSON.parse(result);
one = new Map(one),
two = new Map(two);