분류 javascript

TIL - 파라미터를 대체할 때의 JSON.STRINGIFY의 힘

컨텐츠 정보

  • 조회 303 (작성일 )

본문

나는 뇌를 녹인 흥미로운 문제가 있었다.  내가 배운 것을 공유하고 비슷한 도전에 직면했을 때 잠시 시간을 절약 할 수 있습니다.

JSON.stringify()로 재미있게 놀자.


https://pawelgrzybek.com/til-the-power-of-json-stringify-replacer-parameter/ 


const dude = {
  name: "Pawel",
  friends: ["Dan", "Pedro", "Mr Gregory"]
};
const dudeStringified = JSON.stringify(dude);

console.log(dudeStringified);
// {"name":"Pawel","friends":["Dan","Pedro","Mr Gregory"]}

여기서 놀랄 일은 없습니다. 불행히도 내 프로젝트 (호기심 많은 짐승을 위한 AWS DynamoDB)에 사용 된 아키텍처로 인해 ECMAScript 세트를 다루어야 하고 상황이 더 흥미로워졌습니다. 이것 만 봐


const dude = {
  name: "Pawel",
  friends: new Set(["Dan", "Pedro", "Mr Gregory"])
};
const dudeStringified = JSON.stringify(dude);

console.log(dudeStringified);
// {"name":"Pawel","friends":{}}

나는 값 세트가 좋은 오래된 일반 배열로 변환 될 것이라고 가정했습니다. 내가 틀렸다고 짐작 했듯이, Set, WeakSets, Maps 및 WeakMaps는 무시되거나 null로 대체됩니다. JSON.stringify()의 선택적 두 번째 인수를 사용하면 모든 세트를 이스케이프하고 배열로 변환 할 수 있습니다.


const dude = {
  name: "Pawel",
  friends: new Set(["Dan", "Pedro", "Mr Gregory"])
};
const dudeStringified = JSON.stringify(dude, (key, value) =>
  value instanceof Set ? [...value] : value
);

console.log(dudeStringified);
// {"name":"Pawel","friends":["Dan","Pedro","Mr Gregory"]}

문제 해결 ?


(TIL) 오늘 내가 배운 


JSON.stringify()는 재귀 대체 함수 또는 화이트리스트 키 배열이 될 수 있는 두 번째 선택적 인수를 사용합니다. 이렇게…


// Second argument as a replacer function

const dude = {
  name: "Dan"
};
const dudeStringified = JSON.stringify(dude, (key, value) =>
  key === "name" ? "Pawel" : value
);

console.log(dudeStringified);
// {"name":"Pawel"}
// Second argument as an array of white-listed keywords

const dude = {
  name: "Pawel",
  friends: new Set(["Dan", "Pedro", "Mr Gregory"])
};

const dudeStringified = JSON.stringify(dude, ["name"]);

console.log(dudeStringified);
// {"name":"Pawel"}

세 번째 인수는 문자열 또는 숫자 일 수 있습니다. 구분 기호로 사용할 공백 또는 텍스트 수를 결정합니다. 보기!


// Third argument as a number

const dude = {
  name: "Pawel",
  friends: ["Dan", "Pedro", "Mr Gregory"]
};
const dudeStringified = JSON.stringify(dude, null, 4);

console.log(dudeStringified);
// {
//   "name": "Pawel",
//   "friends": [
//       "Dan",
//       "Pedro",
//       "Mr Gregory"
//   ]
// }
// Third argument as a string

const dude = {
  name: "Pawel",
  friends: ["Dan", "Pedro", "Mr Gregory"]
};
const dudeStringified = JSON.stringify(dude, null, "?");

console.log(dudeStringified);
// {
// ?"name": "Pawel",
// ?"friends": [
// ??"Dan",
// ??"Pedro",
// ??"Mr Gregory"
// ?]
// }

다음 번까지 호기심을 유지하십시오 ?