UTILS.
100% 브라우저 내 실행
{ }

JS 객체를 엄격한 JSON으로 변환

느슨한 JavaScript 객체 리터럴(인용 없는 키, 작은따옴표, 후행 쉼표, 주석)을 eval 없이 엄격하고 유효한 JSON으로 복구합니다.

— 여기에 결과가 표시됩니다 —

이 도구에 대하여

JS 객체를 엄격한 JSON으로 변환 도구는 느슨한 JavaScript 또는 JSON5 스타일의 객체 리터럴을 엄격하고 유효한 JSON으로 복구합니다. 손으로 작성한 토크나이저 위에 구축되어 eval이나 new Function을 절대 사용하지 않으므로, 엄격한 Content Security Policy 아래에서 안전하고 신뢰할 수 없는 텍스트를 붙여넣기에도 안전합니다. 모든 것이 브라우저에서 실행됩니다.

실제 JSON이 거부하는 것들을 받아들입니다. 인용 없는 식별자 키, 작은따옴표 문자열, ] 또는 } 앞의 후행 쉼표, // 라인 주석과 /* 블록 */ 주석, 16진수(0xFF), 8진수와 2진수 리터럴, 선두 플러스와 선두 점 숫자(+1, .5), 그리고 undefined, NaN, Infinity 값입니다. 키는 큰따옴표로 다시 인용되고, 문자열은 올바르게 다시 이스케이프되며, 주석과 후행 쉼표는 제거되고, 숫자는 순수 JSON 숫자로 정규화됩니다. undefined 처리 방식(null로 변환 또는 키 삭제)과 유한하지 않은 숫자 처리 방식(null로 변환 또는 오류 발생)을 선택한 다음, 값은 선택한 들여쓰기(스페이스 2칸, 4칸, 탭, 또는 최소화)로 JSON.stringify를 통해 다시 직렬화됩니다.

입력을 파싱할 수 없으면 도구는 첫 번째 구문 오류를 그 줄과 열과 함께 보고하여 문제를 빠르게 찾을 수 있게 합니다. 이는 느슨한 입력을 단순히 거부하는 엄격한 JSON 포매터를 보완합니다. 여기서 목표는 복사한 콘솔 출력, 설정 스니펫, 손으로 편집한 객체를 어떤 파서든 받아들일 JSON으로 살려내는 것입니다.

자주 묻는 질문

어떤 느슨한 구문을 받아들이나요?
인용 없는 키, 작은따옴표 문자열, 후행 쉼표, // 및 /* */ 주석, 16진수/8진수/2진수 숫자, 선두 플러스와 선두 점 숫자, 그리고 undefined, NaN, Infinity 리터럴입니다. 복사한 JS 객체를 JSON으로서 유효하지 않게 만드는 흔한 것들입니다.
파싱에 eval을 사용하나요?
아니요. 손으로 작성한 토크나이저와 재귀 하강 파서를 사용하며 eval이나 new Function을 절대 쓰지 않으므로, 엄격한 Content Security Policy 아래에서 작동하고 신뢰할 수 없는 입력에도 안전합니다. 항상 데이터만 생성하고 코드를 실행하지 않습니다.
undefined, NaN, Infinity는 어떻게 처리되나요?
JSON에는 그런 값이 없습니다. 선택할 수 있습니다. undefined는 null이 되거나 키가 삭제될 수 있고, NaN/Infinity는 null이 되거나 오류를 발생시킬 수 있습니다. 이렇게 하면 어느 쪽이든 출력이 엄격하게 유효한 JSON으로 유지됩니다.
입력이 유효하지 않으면 어떻게 되나요?
파서는 첫 번째 진짜 구문 오류에서 멈추고 그것이 발생한 줄과 열과 함께 보고하므로, 추측하는 대신 문제가 되는 문자를 찾아 고칠 수 있습니다.

더 많은 도구