ホームページ  >  記事  >  ウェブフロントエンド  >  JSON.stringify() と JSON.parse() を使用して ES6 マップをシリアル化および逆シリアル化するにはどうすればよいですか?

JSON.stringify() と JSON.parse() を使用して ES6 マップをシリアル化および逆シリアル化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-21 03:13:14141ブラウズ

How Can I Serialize and Deserialize ES6 Maps Using JSON.stringify() and JSON.parse()?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。