2017-10-14 7 views
1

[C'est la première question sur le SO, donc me présenter des excuses pour toute erreur]objet sérialisation Carte avec jQuery/JS

Je suis en train d'enregistrer une carte, comme celui ci-dessous, dans un cookie.

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

Pour cela, je dois formater en JSON. J'ai essayé plusieurs méthodes, comme:

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

Mais aucun d'eux ne semble fonctionner ...

Alors, je l'ai fait:

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

(Le fait de devoir reconstruire la clé de décodage du JSON ...)

Il existe une meilleure façon de sérialiser un objet Map?

Répondre

1

Pas exactement un typique « stringify », mais vous pouvez utiliser l'opérateur de diffusion combinée à JSON.stringify(), qui vous donnera un tableau ...

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

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

Cela vous donnera ...

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

Et pour le convertir à nouveau ... Carte

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

Nice, merci beaucoup! –

+0

Cela fonctionne très bien, mais n'est pas pris en charge par les anciens navigateurs. Vérifiez [ici] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) pour la compatibilité. –