在javascript中映射对象的字符串

新手上路,请多包涵
 var map = new Map();
map.set('key1','value1');
map.set('key2','value2');

console.log(map);
console.log(map.toString());
console.log(JSON.parse(map.toString()))
//Uncaught SyntaxError: Unexpected token o in JSON at position 1

使用 toString() 将地图对象转换为字符串,现在我无法从字符串转换为地图对象。

原文由 VAMSEE MOHAN KRISHNA 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 291
2 个回答

要存储字符串化结果,最好使用纯 JSON 对象,但是使用 Map 您可以创建一个条目数组并将其字符串化

var str = JSON.stringify(Array.from( map.entries()));

然后您可以再次将 JSON 字符串解析为数组并构造一个新的 Map

 var map = new Map(JSON.parse(str))

 var map1 = new Map();
map1.set('key1','value1');
map1.set('key2','value2');

var str = JSON.stringify(Array.from( map1.entries()));

//store the string somewhere or pass it to someone
//or however you want to carry it

//re construct the map again
var map2 = new Map(JSON.parse(str))

console.log('key1', map2.get('key1'));
console.log('key2', map2.get('key2'));

但是, Array.from(map) 或 using 也将返回相同的东西并且可以在这里使用,但是在执行它之前有人不能授予它实际返回的内容,另一方面,获取迭代器然后形成数组是更传统和可读,但是 Array.from(map) 可能是更好的解决方案。另外 spread operator 可以在 地图上 使用 [...map]map.entries() [...map.entries()] 以形成相同的条目数组。

原文由 Koushik Chatterjee 发布,翻译遵循 CC BY-SA 3.0 许可协议

var map = new Map();
map.set('key1','value1');
map.set('key2','value2');

console.log(map);
//Covert your map object into JSON object
var jsonObj=[];

map.forEach(function(val,key){
var tempObj={};
tempObj[key]=val;
jsonObj.push(tempObj)
})

console.log(JSON.stringify(jsonObj));
console.log(JSON.parse(JSON.stringify(jsonObj)))
//Uncaught SyntaxError: Unexpected token o in JSON at position 1

原文由 Chandrakant Thakkar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题