ホームページ > 記事 > ウェブフロントエンド > JSON.stringify() と JSON.parse() を使用して ES6 マップをシリアル化および逆シリアル化するにはどうすればよいですか?
JSON.stringify() と ES6 マップ
ES6 マップは JavaScript オブジェクトの強力な代替手段を提供しますが、JSON.stringify() を使用してシリアル化します。 ) 難しいかもしれません。この障害を克服するには、JSON.stringify() の replacer 関数と、JSON.parse() の対応する reviver を利用できます。
replacer によるカスタム シリアル化
replacer 関数を使用すると、オブジェクトのシリアル化方法をカスタマイズできます。この場合、Map オブジェクトを処理するようにこれを変更できます。
function replacer(key, value) { if(value instanceof Map) { return { dataType: 'Map', value: Array.from(value.entries()), // or with spread: value: [...value] }; } else { return value; } }
reviver によるカスタム逆シリアル化
同様に、reviver 関数を使用すると、オブジェクトの逆シリアル化方法を変更できます。 。これを使用して Map オブジェクトを復元できます。
function reviver(key, value) { if(typeof value === 'object' && value !== null) { if (value.dataType === 'Map') { return new Map(value.value); } } return value; }
使用法
これらの関数を定義すると、効果的に JSON.stringify() と JSON.parse( ) マップ オブジェクト:
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 サイトの他の関連記事を参照してください。