あなたはJSON.stringify
とマップおよび/またはセット標準のJavaScriptの配列にして再度変換しJSON.parse
と対応reviver
機能をreplacer
機能を使用することができます。例えば
代替とリバイバー機能マップから誘導されたものとして
const replacer = (k, v) =>
v instanceof Map ? ({_WAS_MAP: [...v]}) :
v instanceof Set ? ({_WAS_SET: [...v]}) : v;
const reviver = (k, v) =>
v && v._WAS_MAP ? new Map(v._WAS_MAP) :
v && v._WAS_SET ? new Set(v._WAS_SET) : v;
この技術は、例えば、新しい配列を、例えば、JSON.stringify
内a map-to-array conversion strategyを使用し、同時に「マーク」 Map { 'a' => 1 }
を{"_WAS_MAP":[["a",1]]}
に変換します。その後、JSON.parse
は_WAS_MAP
というラベルの付いたプロパティを検索し、それらをマップに変換することができます。同様の戦略がセットでも有効です。
例コード:
const myOriginalObject = {
a: [1, new Set([2, new Map()]), 3],
c: {d: new Map([['e', 4], ['f', new Set()]])}
};
console.log('original:', myOriginalObject);
const mySavedJson = JSON.stringify(myOriginalObject, replacer);
console.log('JSON:', mySavedJson);
const myRetrievedObject = JSON.parse(mySavedJson, reviver);
console.log('retrieved:', myRetrievedObject); // all data is recovered
出力(空白を明確にするために編集):一方、ため
original: { a :[1, Set {2, Map {} },3], c :{ d: Map { 'e' => 4, 'f' => Set {} }}}
JSON: {"a":[1,{"_WAS_SET":[2,{"_WAS_MAP":[]}]},3],"c":{"d":{"_WAS_MAP":[["e", 4],["f",{"_WAS_SET":[]}]]}}}
retrieved: { a :[1, Set {2, Map {} },3], c :{ d: Map { 'e' => 4, 'f' => Set {} }}}
(I、作業コードスニペットに上記のコードを含んでいませんconsole.log
は、ノードの実行時に上記のように地図やデータを表示します(ノードなど)。StackOverflowのコードスニペットで実行すると表示されません。