2017-10-14 20 views
1

序列化映射对象[这是第一个问题上如此,所以我道歉对任何错误]与jQuery/JS

我想保存地图,像下面的一个,在Cookie中。

var myMap = new Map(); 
myMap.set("k1", { 
    a1: "...", 
    a2: "...", 
    a3: "..." 
}); 

为此,我必须格式化为JSON。我试过很多方法,如:

$.toJSON(myMap) 
$.param(myMap) 
JSON.stringify(myMap) 

但他们都不似乎工作...

所以,我这样做:

var serial = []; 
myMap.forEach(function(value){ 
    serial.push(value); 
}); 
var result = $.toJSON(serial) 

(有重建的解码关键JSON ...)

有更好的方法来序列化一个Map对象吗?

回答

1

不完全是一个典型的“字符串”,但您可以使用蔓延运营商JSON.stringify()相结合,会给你一个数组...

var myMap = new Map(); 
myMap.set("k1", { a1: "...", a2: "...", a3: "..." }); 
myMap.set("k2", { b1: "...", b2: "...", b3: "..." }); 

var myJSON = JSON.stringify([...myMap]); 
alert(myJSON); 

这会给你...

[["k1",{"a1":"...","a2":"...","a3":"..."}],["k2",{"b1":"...","b2":"...","b3":"..."}]] 

并把它转换再次地图...

var recoveredMap = new Map(JSON.parse(myJSON)); 
+0

尼斯,非常感谢! –

+0

这很好用,但旧版浏览器不支持。检查[这里](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)以获得兼容性。 –