首页  >  文章  >  web前端  >  如何使用 JSON.stringify() 和 JSON.parse() 序列化和反序列化 ES6 映射?

如何使用 JSON.stringify() 和 JSON.parse() 序列化和反序列化 ES6 映射?

Barbara Streisand
Barbara Streisand原创
2024-11-21 03:13:14142浏览

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

JSON.stringify() 和 ES6 Maps

ES6 Maps 提供了 JavaScript 对象的强大替代方案,但使用 JSON.stringify( 序列化它们)可能具有挑战性。为了克服这个障碍,您可以利用 JSON.stringify() 中的 Replacer 函数及其 JSON.parse() 中的对应 reviver。

带有替换器的自定义序列化

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( ) Map 对象:

const originalValue = new Map([['a', 1]]);
const str = JSON.stringify(originalValue, replacer);
const newValue = JSON.parse(str, reviver);
console.log(originalValue, newValue);

深度嵌套

提供的解决方案支持数组、对象和 Map 的深度嵌套,如下所示:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn