>  기사  >  웹 프론트엔드  >  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()의 대체 기능과 JSON.parse()의 해당 부활 기능을 활용할 수 있습니다.

교체 기능을 사용한 사용자 정의 직렬화

교체 기능을 사용하면 객체가 직렬화되는 방식을 사용자 정의할 수 있습니다. 이 경우 지도 객체를 처리하도록 수정할 수 있습니다.

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;
}

사용

이러한 함수를 정의하면 이제 효과적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.