JSON 포맷터 & 검증기

JSON을 붙여넣고 정렬하거나 압축하세요. 문법 오류가 있으면 줄·칸 위치와 함께 흔한 원인을 알려 드리고, 데이터가 몇 개의 키와 몇 단계 깊이로 이뤄졌는지도 보여 줍니다.

JSON이란 무엇이고 왜 문법이 엄격한가

JSON(JavaScript Object Notation)은 데이터를 텍스트로 주고받기 위한 형식으로, 국제 표준 ECMA-404와 IETF RFC 8259에 규정되어 있습니다. 이름에 JavaScript가 들어가지만 언어에 종속되지 않아 파이썬, 자바, Go, PHP 등 거의 모든 언어에서 같은 방식으로 읽고 쓸 수 있고, 웹 API와 설정 파일의 사실상 공통어가 되었습니다. 문법이 극도로 단순하고 엄격한 이유는 서로 다른 시스템이 같은 텍스트를 같은 데이터로 해석해야 하기 때문입니다. "대충 알아듣는" 여지를 없앤 대신, 사람이 손으로 쓸 때 쉼표나 따옴표 하나만 틀려도 전체가 거부됩니다. 이 도구는 그 거부 이유를 사람이 알아볼 수 있는 위치와 설명으로 바꿔 주는 역할을 합니다.

JSON에 쓸 수 있는 값은 6가지뿐

종류예주의할 점
문자열"안녕", "a\nb"큰따옴표만 허용. 줄바꿈·탭 같은 제어 문자는 \n, \t처럼 이스케이프해야 함
숫자30, -1.5, 2e3앞에 0을 붙인 08, 16진수 0xFF, NaN, Infinity, 끝이 점인 1. 은 불가
불리언true, false소문자만 허용 (True, FALSE 불가)
nullnullundefined는 JSON에 없는 값
배열[1, "a", null]마지막 요소 뒤 쉼표(트레일링 콤마) 불가
객체키: 값 쌍의 묶음키는 반드시 큰따옴표 문자열. 마지막 쌍 뒤 쉼표 불가

날짜·시간 전용 타입이 없어서 보통 ISO 8601 문자열(예: 2025-01-01T00:00:00Z)이나 유닉스 타임스탬프 숫자로 표현합니다. 바이너리 데이터도 직접 담을 수 없어 Base64 문자열로 바꿔 넣는 것이 일반적입니다.

자주 나는 문법 오류와 해결법

아래 여덟 가지가 실무에서 보는 오류의 대부분입니다. 이 도구는 오류가 났을 때 입력 내용을 훑어 해당될 만한 항목을 "의심되는 원인"으로 따로 알려 줍니다.

원인모양해결
끝 요소 뒤 쉼표[1,2,], 객체의 마지막 쌍 뒤 쉼표마지막 쉼표 삭제
작은따옴표'name'큰따옴표로 교체
따옴표 없는 키name: 1키를 큰따옴표로 감싸기
주석// 설명, /* 설명 */삭제 (JSON은 주석 불가)
파이썬·JS 값None, True, undefined, NaNnull, true, false로 바꾸거나 키 자체를 제거
쉼표 누락"a":1 "b":2두 쌍 사이에 쉼표 추가
괄호 불일치여는 괄호와 닫는 괄호의 종류·개수 불일치들여쓰기 정렬이 되는 부분까지 확인해 짝 맞추기
문자열 안의 줄바꿈큰따옴표 안에서 실제로 Enter를 친 경우<code>\n</code>으로 이스케이프

오류 위치는 어떻게 계산하나요?

브라우저의 JSON 파서는 "위치 N에서 오류"처럼 글자 순번(0부터 센 인덱스)을 알려 주거나, 최신 엔진은 줄과 칸까지 알려 줍니다. 이 도구는 순번만 주어지면 그 앞부분의 줄바꿈 개수를 세어 줄 번호를, 마지막 줄바꿈 이후의 글자 수로 칸 번호를 계산하고, 해당 줄을 미리보기로 보여 주며 문제 위치에 표시를 붙입니다. 중요한 점은 파서가 보고하는 위치는 "문제를 처음 알아챈 곳"이지 "실수를 한 곳"이 아닐 수 있다는 것입니다. 예를 들어 쉼표를 빠뜨린 경우 오류는 쉼표가 있어야 할 자리가 아니라 그 다음 글자에서 보고됩니다. 표시된 위치의 바로 앞부분도 함께 살펴보세요. 브라우저마다 오류 문구와 위치 표기 방식이 다르므로, 위치 정보를 얻지 못한 경우에는 원문 메시지와 위의 원인 점검만 제공합니다.

정렬(Pretty)과 압축(Minify)은 언제 쓰나

두 형식은 의미가 완전히 같고 공백만 다릅니다. 사람이 읽고 수정하는 설정 파일·로그 분석에는 정렬, 네트워크로 보내거나 URL·환경변수·쿠키에 담을 때는 압축이 적합합니다. 아래는 이 페이지가 빌드될 때 같은 데이터를 직접 변환해 측정한 크기입니다(UTF-8 기준 바이트, 한글은 글자당 3바이트).

{
  "name": "홍길동",
  "age": 30,
  "tags": [
    "a",
    "b"
  ],
  "address": {
    "city": "서울"
  }
}
형식크기(바이트)
압축(한 줄)74
공백 2칸113
공백 4칸137
탭101

예시 데이터는 압축하면 공백 2칸 정렬본보다 약 35% 작아집니다. 이 차이는 데이터에 중첩이 많을수록 커지지만, 서버가 gzip·Brotli 같은 압축 전송을 쓴다면 전송량 차이는 훨씬 줄어듭니다. 탭이 공백보다 작은 이유는 들여쓰기 한 단계가 1바이트이기 때문입니다.

검산된 예시 세 가지: 변환 시 값이 바뀌는 경우

JSON은 "텍스트 → 값 → 텍스트" 과정을 거치므로, 형식 변환만 했는데도 내용이 달라지는 경우가 있습니다. 아래는 모두 이 페이지 빌드 때 실제로 실행한 결과입니다.

예시 1. 큰 정수의 정밀도 손실

입력 {"id":12345678901234567890}를 파싱한 뒤 다시 출력하면 id가 12345678901234567000로 바뀝니다. 자바스크립트의 숫자는 64비트 부동소수점이라 안전하게 표현할 수 있는 정수가 9007199254740991(2^53−1)까지이기 때문입니다. 트위터·SNS의 글 ID, 주문 번호처럼 16자리를 넘는 정수는 문자열("12345678901234567890")로 주고받는 것이 정석입니다. 이 도구는 입력에서 안전 범위를 넘는 정수를 발견하면 경고를 표시합니다.

예시 2. 키 순서, 중복 키, 숫자 표기

{"b":1,"2":2,"1":3}는 출력하면 {"1":3,"2":2,"b":1}이 됩니다. 자바스크립트 엔진은 "1", "2"처럼 정수 형태의 키를 먼저 오름차순으로 내보내기 때문에, 원본의 키 순서가 이런 경우에는 보존되지 않습니다. 또 {"a":1,"a":2}처럼 같은 키가 두 번 나오면 표준은 키가 유일해야 한다고 권고할 뿐 처리 방식을 정하지 않으며, 이 도구(브라우저)는 마지막 값만 남겨 {"a":2}이 됩니다. 숫자는 [0.1,1e3,1.0,-0]가 [0.1,1000,1,0]으로 바뀝니다. 1e3은 1000, 1.0은 1, −0은 0으로 정규화됩니다. 값의 의미는 같지만 글자 하나까지 같아야 하는 서명·해시 검증용 데이터에는 이 도구의 정렬 결과를 쓰지 마세요.

예시 3. 키 이름순 정렬로 두 JSON 비교하기

서로 다른 시스템이 같은 데이터를 키 순서만 다르게 내보내면 눈으로는 비교가 어렵습니다. 두 JSON을 각각 "키 이름순 정렬 + 정렬(Pretty)"로 변환한 뒤 텍스트 비교 도구에 넣으면 실제로 값이 다른 부분만 남습니다. 배열은 순서가 의미를 가지므로 정렬하지 않고 그대로 두며, 객체의 키만 재귀적으로 정렬합니다.

이 도구의 한계와 쓰면 안 되는 경우

결과를 어떻게 활용하나

자주 묻는 질문

입력한 JSON이 서버로 전송되나요?

아니요. 파싱과 변환은 모두 브라우저의 자바스크립트로 처리되며, 입력 내용은 서버로 보내지거나 저장되지 않습니다.

JavaScript 객체(따옴표 없는 키, 작은따옴표)도 지원하나요?

아니요. 표준 JSON만 허용하며 키와 문자열은 반드시 큰따옴표여야 합니다. 이 경우 도구가 "의심되는 원인"으로 따옴표 문제를 알려 줍니다. 콘솔에 출력한 JS 객체를 그대로 붙였다면 키와 값을 큰따옴표로 고쳐야 합니다.

정렬했더니 키 순서가 바뀌었어요. 왜 그런가요?

"키 이름순 정렬"을 켰다면 의도된 동작입니다. 켜지 않았는데 바뀐 경우는 "1", "2"처럼 정수 형태의 키가 있을 때 자바스크립트가 이를 먼저 오름차순으로 내보내기 때문입니다. 위의 예시 2를 참고하세요. JSON 표준상 객체의 키 순서에는 의미가 없으므로 데이터 의미는 같습니다.

숫자 끝자리가 0으로 바뀌었어요.

15~16자리를 넘는 정수는 자바스크립트가 정확히 표현하지 못합니다. 원본 데이터는 그대로 두고, 이 도구의 출력을 쓰지 말고 해당 값을 문자열로 보내도록 시스템을 고치는 것이 근본 해결입니다.

한글이 \uXXXX로 보이거나 반대로 한글로 보이는데, 같은 데이터인가요?

같습니다. 한글을 홍처럼 이스케이프하든 그대로 쓰든 JSON 파서는 같은 문자열로 읽습니다. 이 도구는 읽기 좋게 한글을 그대로 출력합니다. 다만 BOM(파일 맨 앞의 보이지 않는 문자)이 붙은 파일은 일부 파서가 거부하므로 UTF-8(BOM 없음)로 저장하는 것이 안전합니다.

최상위가 객체나 배열이 아닌 값(숫자, 문자열 하나)도 올바른 JSON인가요?

현재 표준(RFC 8259)에서는 올바릅니다. 42나 "hello"도 유효한 JSON 텍스트입니다. 다만 오래된 시스템은 최상위가 객체나 배열이어야 한다고 가정하기도 하니, 연동 상대의 요구를 확인하세요.