MiServe DevTools

내 스티커

도구를 여기에 고정하세요. 이 브라우저에 저장됩니다.

JSON 포맷터·검증기

JSON을 포맷·압축·검증합니다. 구문 오류는 정확한 줄과 열로 알려 주고, 큰 숫자는 쓰인 그대로 유지합니다.

브라우저에서 실행됩니다. 붙여 넣은 내용은 업로드되지 않습니다.

이 도구에 대하여

유효한 JSON이란

JSON은 RFC 8259와 ECMA-404에 정의되어 있습니다. 문서 하나는 값 하나이며, 그 값은 객체, 배열, 문자열, 숫자, true, false, null 중 하나입니다. 문자열과 객체 키는 큰따옴표로 감싸며, 주석 문법은 없습니다.

깨진 문서 중 상당수에는 JavaScript 객체 리터럴에서는 허용되지만 JSON에서는 허용되지 않는 것이 들어 있습니다. 마지막 항목 뒤의 쉼표, 작은따옴표, 따옴표 없는 키, 주석 같은 것들입니다. 흔한 실수 고치기를 켜면 이 도구는 이런 것들과 함께 문자열 안에 그대로 들어간 줄바꿈과 탭, 작은따옴표 앞의 백슬래시, Python의 True, False, None까지 읽어 들이고, 무엇을 바꿨는지 알려 준 뒤 엄격한 JSON으로 출력합니다.

오류 메시지 읽기

JSON.parse 오류 문구는 브라우저마다 다르고, 오류 위치를 알려 주지 않는 브라우저도 있습니다. 이 도구는 자체 파서로 텍스트를 읽기 때문에 메시지와 줄, 열이 어느 브라우저에서나 같습니다. 오류 위치로 이동을 누르면 입력에서 문제가 된 문자가 선택되며, 붙여 넣은 직후에는 도구가 알아서 선택합니다.

표시되는 위치는 파서가 더 진행할 수 없었던 지점이므로 실제 실수보다 약간 뒤일 수 있습니다. 예를 들어 쉼표가 빠진 경우에는 다음 항목의 첫 문자에서 오류가 보고됩니다.

큰 숫자와 중복 키

JSON 문법은 숫자의 크기를 제한하지 않지만, JavaScript의 JSON.parse는 모든 숫자를 64비트 부동소수점으로 바꾸며, 이 형식은 2의 53제곱(9,007,199,254,740,992)까지만 모든 정수를 정확히 표현할 수 있습니다. 12345678901234567890처럼 더 큰 식별자는 JSON.parse를 거치면 12345678901234567000이 됩니다. 이 포맷터는 숫자를 변환하지 않고 텍스트 그대로 복사하므로 긴 정수나 1.0, 1e5가 들어온 그대로 나가며, JavaScript 파서를 거치면 값이 바뀌는 정수가 있으면 경고합니다.

RFC 8259는 객체의 키가 고유한 것이 바람직하다고 하며, 중복 키를 받은 소프트웨어의 동작은 예측할 수 없다고 말합니다. 많은 파서는 경고 없이 마지막 값만 남깁니다. 이 포맷터는 모든 항목을 유지하고 첫 번째 중복 키의 위치를 알려 줍니다.

키 정렬은 모든 단계의 모든 객체에서 키를 UTF-16 코드 단위 순으로 정렬합니다. JavaScript 기본 정렬과 같은 순서로, 숫자, 대문자, 소문자 순입니다. 배열은 순서를 유지합니다. 크기는 UTF-8 바이트로 계산합니다.

자주 묻는 질문

붙여 넣은 JSON이 서버로 전송되나요?

아니요. 파싱과 포맷은 브라우저 탭의 JavaScript가 처리하며, 이 도구는 붙여 넣은 내용으로 네트워크 요청을 보내지 않습니다.

주석과 후행 쉼표는 왜 오류인가요?

RFC 8259의 문법에는 주석이 없고 모든 쉼표 뒤에 값이 와야 하므로, 표준 파서는 둘 다 거부합니다. 이를 허용하는 것은 JSON5라는 별개의 형식입니다. 이런 파일을 읽어 엄격한 JSON으로 받으려면 실수 고치기 옵션을 켜세요.

포맷과 압축은 어떻게 다른가요?

포맷은 각 항목을 한 줄에 하나씩 놓고 들여써서 구조를 읽기 쉽게 만듭니다. 압축은 항목 사이의 공백을 없애 저장하고 전송하기에 더 작은 문서로 만듭니다. 두 형태의 데이터는 같습니다.

키를 정렬하면 데이터가 바뀌나요?

명세를 따르는 프로그램이라면 바뀌지 않습니다. 명세는 객체를 이름과 값 쌍의 순서 없는 모음으로 정의하기 때문입니다. 정렬은 두 문서를 줄 단위로 비교할 때 유용합니다. 배열은 순서가 있으므로 항목을 옮기지 않습니다.

데이터의 다른 도구