ホームページ  >  記事  >  ウェブフロントエンド  >  JSON.stringify と JSON.parse を使用して ES6 マップをシリアル化および逆シリアル化する方法は?

JSON.stringify と JSON.parse を使用して ES6 マップをシリアル化および逆シリアル化する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-20 13:00:22223ブラウズ

How to Serialize and Deserialize ES6 Maps with JSON.stringify and JSON.parse?

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

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