반응형
JSON 문자열 화
하나의 JSON.stringify () 는 어떻게 집합 입니까?
Chromium 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()));
다음 JSON.stringify
대체기를 사용하십시오 .
(때문에 toJSON
기존 유물이며, 더 좋은 방법은 사용자 정의를 사용하는 것입니다replacer
참조 https://github.com/DavidBruant/Map-Set.prototype.toJSON/issues/16를 )
function Set_toJSON(key, value) {
if (typeof value === 'object' && value instanceof Set) {
return [...value];
}
return value;
}
그때:
const fooBar = { foo: new Set([1, 2, 3]), bar: new Set([4, 5, 6]) };
JSON.stringify(fooBar, Set_toJSON)
결과:
"{"foo":[1,2,3],"bar":[4,5,6]}"
위의 모든 작업이 수행되는 동안 하위 클래스를 설정하고 toJSON
문자열 화가 올바른지 확인 하는 메서드를 추가하는 것이 좋습니다 . 특히 당신이 자주 끈을 묶을 것이라면. Redux 스토어에서 세트를 사용하고 이것이 문제가되지 않는지 확인해야했습니다.
이것은 기본 구현입니다. 이름 지정은 포인트를 설명하기위한 것입니다.
class JSONSet extends Set {
toJSON () {
return [...this]
}
}
const set = new JSONSet([1, 2, 3])
console.log(JSON.stringify(set))
참고 URL : https://stackoverflow.com/questions/31190885/json-stringify-a-set
반응형
'developer tip' 카테고리의 다른 글
C ++에서 동적 디스패치와 후기 바인딩의 차이점은 무엇입니까? (0) | 2020.11.05 |
---|---|
OS X의 Firefox에서 Bootstrap 3 Styled Select 드롭 다운이보기 흉하게 보입니다. (0) | 2020.11.05 |
C #을 사용하여 마우스 커서를 이동하는 방법은 무엇입니까? (0) | 2020.11.05 |
RxJS Observables로 Promise.all 동작? (0) | 2020.11.05 |
Spring MVC 대 JSF (0) | 2020.11.05 |