ES6 マップを JSON 処理用にシリアル化する方法
ES6 オブジェクトからマップに切り替える場合、JSON.stringify を直接実行できません。地図が邪魔になることもあります。この記事では、JSON.stringify と JSON.parse の両方の 2 番目の引数、replacer と reviver をそれぞれ使用して、この課題に対する解決策を詳しく掘り下げます。
カスタム Replacer 関数と Reviver 関数
マップのサポートを追加するには、カスタムの置換関数と復活関数を作成できます。これらの関数は、JSON との間の変換を処理します:
function replacer(key, value) { if (value instanceof Map) { return { dataType: 'Map', value: Array.from(value.entries()), // or with spread: value: [...value] }; } else { return value; } }
function reviver(key, value) { if (typeof value === 'object' && value !== null) { if (value.dataType === 'Map') { return new Map(value.value); } } return value; }
使用法
カスタム関数を適切に配置すると、マップのシリアル化と逆シリアル化が簡単になります。
const originalValue = new Map([['a', 1]]); const str = JSON.stringify(originalValue, replacer); const newValue = JSON.parse(str, reviver); console.log(originalValue, newValue);
深いネスト
この手法は、マップ、配列、オブジェクトで構成される深くネストされた構造に拡張されます:
const originalValue = [ new Map([['a', { b: { c: new Map([['d', 'text']]) } }]]) ]; const str = JSON.stringify(originalValue, replacer); const newValue = JSON.parse(str, reviver); console.log(originalValue, newValue);
以上がJSON.stringify と JSON.parse を使用して ES6 マップをシリアル化および逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。