객체를 Json 자바스크립트로 변환

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

순환 구조는 자신을 참조하는 객체입니다. 다음 예에서 객체(obj)는 위치 키의 값으로 참조됩니다.

XML과 마찬가지로 JSON(JavaScript Object Notation)은 데이터 저장 및 교환에 사용됩니다. JSON은 XML보다 구문 분석 또는 분할이 훨씬 쉽고 JSON.stringify () 메서드를 사용하여 객체를 문자열로 변환할 때 사용하는 것이 좋습니다.

순환 구조를 JSON으로 변환하는 중 오류 발생

JSON은 개체 참조를 지원하지 않으므로 자체 참조하는 JSON 개체를 연결하려고 하면 오타가 발생합니다. 변경할 수 없는 값을 변경하려고 하거나 값을 부적절하게 사용했을 때 발생할 수 있는 오류입니다.

<입력 유형 = "숨겨진" 이름 = "ck_campaign" 값 = "ft-express-wgt-blog"> <입력 유형 = "숨겨진" 이름 = " 흐름" 값 = "sft"> <버튼 유형 = "제출" id = "제출4" 클래스 = "btn btn-success btn-block 버튼-ajax-form" 스타일 = "배경 색상: # ff9d38 ! 중요한; 테두리 색상: # ff9d38 ; 불투명도: 1; 화이트 색상; 너비: 100%; 글꼴 두께: 굵게; 글꼴 크기: 13px; "> 경기 받기 <스크립트 유형 = "텍스트 / 자바스크립트"> 제이쿼리(`# contactForm2`). submit (function(event) {var phone = jQuery(`# msg_phone`).val(); phone = phone.replace(// $ /, ``) .replace(`+ (`, ``) .replace( `) +`, ``) .replace (``, ``) .replace (`+ -`, ``) .replace (`-`, ``) .replace (`(`, ``) .replace (`)`, ``) .교체(`.`, ``), 전화 = 전화.대체(``, ``), 전화 = 전화 .교체(``, ``), var otherphone = 전화. 부분 문자열 (2); if (otherphone .split (``) .e very (char => char === otherphone [0])) {jQuery (`# error_phone`). show (); 반환 false ; } else { var phoneField = jQuery(`# msg_phone`); phoneField.removeAttr("최대 길이"); phoneField.removeAttr("스키마"); phoneField.val(전화); 반환 true; }}) <그림 클래스 = "wp-block-image"> 스크린샷 402

가능한 솔루션

JSON.chaaîne ify () 는 허용되는 체인의 곱을 변환할 뿐만 아니라 전송된 함수가 그렇게 하도록 지정된 경우 값을 대체할 수 있는 대체 매개변수도 포함합니다. 이것이 어떻게 발생하는지 이해하려면 아래 코드를 분석하십시오.

여기 위의 replaceFunc에서 우리는 느슨한 개체 또는 개체 참조를 저장하는 개체인 WeakSet 를 호출합니다. WeakSet의 각 개체는 한 번만 나타날 수 있으므로 반복되거나 순환되는 것을 필터링합니다. r 데이터. new 키워드는 빈 개체를 만드는 연산자입니다.

우리의 return 문에서 if 문을 중첩했습니다. 첫 번째 if 문은 평가할 기본 유형(Undefined, Null, Boolean, Number, String, Function, BigInt, Symbol)을 반환하는 typeof 연산자를 사용합니다.

값 유형이 객체와 엄격하게 동일하고 해당 객체의 값이 0이 아닌 경우 두 번째 if 문, 값이 WeakSet()에 있는지 확인.

JSON.stringify를 호출할 때 (), 원래 원형 구조와 대체 함수에 모두 전달합니다.

이렇게 하면 콘솔에서 원하는 문자열 결과를 얻을 수 있습니다.

; "{" name ":" John "," age ": 23," gender ":" Male "}"

이 오류에 대한 다른 가능한 해결책은 다음과 같은 라이브러리를 사용하는 것입니다. 순환 JSON 파서인 circular-json 또는 cycle.js , IE8 사용자용으로 생성되었습니다.

순환 JSON은 특수 JSON 형식에 대한 순환 참조가 포함된 유효한 JSON 개체를 직렬화 및 역직렬화합니다.

결론

JSON은 지원하지 않습니다. 객체 참조이므로 자신을 참조하는 JSON 객체를 연결하려고 하면 오타가 발생합니다.

순환 구조는 자신을 참조하는 객체입니다. 이러한 객체를 연결할 수 있으려면 개발자는 stringify() 메서드에서 replace 매개변수를 사용하여 전달된 함수가 반복 또는 순환 데이터를 필터링하는지 확인할 수 있습니다.

사용 circle-json과 같은 g 라이브러리도 이 오류에 대한 해결책이 될 수 있습니다.