JSON 문자열화
1개의 JSON.stringify()는 어떻게 설정됩니까?
크롬 43에서는 작동하지 않았던 것:
var s = new Set(['foo', 'bar']);
JSON.stringify(s); // -> "{}"
JSON.stringify(s.values()); // -> "{}"
JSON.stringify(s.keys()); // -> "{}"
시리얼 어레이와 비슷한 것을 얻을 수 있을 것 같습니다.
JSON.stringify(["foo", "bar"]); // -> "["foo","bar"]"
JSON.stringify
세트에 저장된 데이터는 속성으로 저장되지 않기 때문에 세트와 직접 연동되지 않습니다.
그러나 집합을 배열로 변환할 수 있습니다.그러면 제대로 줄을 칠 수 있을 거예요.
다음의 어느쪽이든 유효합니다.
JSON.stringify([...s]);
JSON.stringify([...s.keys()]);
JSON.stringify([...s.values()]);
JSON.stringify(Array.from(s));
JSON.stringify(Array.from(s.keys()));
JSON.stringify(Array.from(s.values()));
「리페이서」기능을 다음에 전달할 수 있습니다.
const fooBar = {
foo: new Set([1, 2, 3]),
bar: new Set([4, 5, 6])
};
JSON.stringify(
fooBar,
(_key, value) => (value instanceof Set ? [...value] : value)
);
결과:
"{"foo":[1,2,3],"bar":[4,5,6]}"
toJSON
는 레거시 아티팩트이며 커스텀을 사용하는 것이 좋습니다.https://github.com/DavidBruant/Map-Set.prototype.toJSON/issues/16 를 참조해 주세요.
위의 모든 작업을 수행하는 동안 서브클래스를 설정하고 추가하는 것이 좋습니다.toJSON
스트링화가 올바른지 확인하는 방법.특히 당신이 자주 끈을 매는다면.저는 Redux 매장에서 세트를 사용하고 있으며, 이것이 문제가 되지 않는지 확인할 필요가 있었습니다.
이것은 기본적인 실장입니다.이름 짓기는 단지 자신의 스타일을 선택하는 포인트를 설명하기 위한 것입니다.
class JSONSet extends Set {
toJSON () {
return [...this]
}
}
const set = new JSONSet([1, 2, 3])
console.log(JSON.stringify(set))
앞의 모든 접근법의 문제는 모두 집합을 배열로 변환한다는 것입니다. 이 배열에는 집합과 인덱스의 전체 포인트가 누락되어 있습니다.
대신 개체를 사용해야 합니다.다음 함수로 변환하거나 Set 대신 Object로 만듭니다.
const mySet = new Set(['hello', 'world']);
const myObj = {};
for (let value of mySet.values()) {
myObj[value] = true;
}
그럼 사용하는 대신mySet.has('hello')
하다myObj.hasOwnProperty('hello')
.
그런 다음 문제 없이 개체로 문자열화합니다.
메모: 다음 방법에서는 키뿐만 아니라 값도 저장해야 하므로 메모리를 더 많이 사용합니다.그러나 성능 면에서는 O(n)인 Array.includes()에 비해 O(1)이며 Set을 사용하는 포인트조차 놓치고 있습니다.
언급URL : https://stackoverflow.com/questions/31190885/json-stringify-a-set
'programing' 카테고리의 다른 글
useEffect()를 사용하여 React-Hook-Form defaultValue를 변경하는 방법 (0) | 2023.03.27 |
---|---|
Spring Boot을 사용하여 로그 메시지를 파일에 쓰는 방법 (0) | 2023.03.27 |
WordPress "save_post" 액션 문제 (0) | 2023.03.27 |
Angular로 변경한 후 MathJax를 업데이트하는 중JS 모형 (0) | 2023.03.27 |
SQLDEVELoper에서 백그라운드 프로세스가 완료되었는지 확인하는 방법 (0) | 2023.03.15 |