728x90
반응형
질문 : JSON과 유사한 형식으로 원형 구조를 인쇄하려면 어떻게해야합니까?
JSON으로 변환하여 보내려는 큰 개체가 있습니다. 그러나 그것은 원형 구조를 가지고 있습니다. 나는 순환 참조가 존재하는 모든 것을 던지고 문자열이 될 수있는 것을 보내고 싶습니다. 어떻게하나요?
감사.
var obj = {
a: "foo",
b: obj
}
obj를 다음과 같이 문자열 화하고 싶습니다.
{"a":"foo"}
답변
사용자 지정 JSON.stringify
와 함께 JSON.stringify를 사용합니다. 예를 들면 :
// Demo: Circular reference
var circ = {};
circ.circ = circ;
// Note: cache should not be re-used by repeated calls to JSON.stringify.
var cache = [];
JSON.stringify(circ, (key, value) => {
if (typeof value === 'object' && value !== null) {
// Duplicate reference found, discard key
if (cache.includes(value)) return;
// Store value in our collection
cache.push(value);
}
return value;
});
cache = null; // Enable garbage collection
이 예에서 대체자는 100 % 정확하지 않습니다 ( "중복"정의에 따라 다름). 다음과 같은 경우 값이 삭제됩니다.
var a = {b:1}
var o = {};
o.one = a;
o.two = a;
// one and two point to the same object, but two is discarded:
JSON.stringify(o, ...);
그러나 개념은 다음과 같습니다. 사용자 지정 대체자를 사용하고 구문 분석 된 개체 값을 추적합니다.
es6로 작성된 유틸리티 함수 :
// safely handles circular references
JSON.safeStringify = (obj, indent = 2) => {
let cache = [];
const retVal = JSON.stringify(
obj,
(key, value) =>
typeof value === "object" && value !== null
? cache.includes(value)
? undefined // Duplicate reference found, discard key
: cache.push(value) && value // Store value in our collection
: value,
indent
);
cache = null;
return retVal;
};
// Example:
console.log('options', JSON.safeStringify(options))
출처 : https://stackoverflow.com/questions/11616630/how-can-i-print-a-circular-structure-in-a-json-like-format
728x90
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
CSS에서 속성으로 요소 선택 (0) | 2021.08.03 |
---|---|
HTML 양식 입력 필드에 대해 disabled =“disabled”와 readonly =“readonly”의 차이점 (0) | 2021.07.30 |
HTML 양식 읽기 전용 SELECT 태그 / 입력 (0) | 2021.07.30 |
브라우저마다 허용되는 URL의 최대 길이 (0) | 2021.07.30 |
HTML5 number input의 화살표를 숨기는 방법 (0) | 2021.07.29 |