GoodFormat

엉킨 한 줄 JSON · XML · 파이썬 dict를 붙여넣으면 주욱 정리해 줍니다.

🔒 모든 처리는 브라우저 안에서만 이뤄집니다. 입력 내용은 서버로 전송되지 않습니다.

입력
결과
정리된 결과가 여기에 표시됩니다.
들여쓰기

GoodFormat 사용법

JSON 응답을 로그에서 복사했더니 한 줄로 뭉쳐 있거나, 파이썬에서 print(dict) 한 결과가 들여쓰기 없이 길게 나왔을 때, 또는 XML이 줄바꿈 없이 붙어 있을 때 그대로 붙여넣으면 됩니다. 자동 감지가 형식을 알아서 판별하고, 안 맞으면 위 탭에서 직접 골라 주세요.

  • JSON — 표준 JSON을 들여쓰기로 펼치거나 한 줄로 압축합니다.
  • 파이썬 dict' 따옴표, True/False/None, 튜플까지 인식해 보기 좋은 JSON으로 변환합니다.
  • XML — 태그 구조에 맞춰 들여쓰기를 다시 매깁니다.
  • 트리 뷰 — 중첩 구조를 접고 펼치며 살펴볼 수 있습니다.

괄호·기호 도감

이 기호들, 어디서 왔고 어디 쓰일까
{ }
중괄호 · curly brace

C 계열 언어에서 코드 블록을 묶는 기호이자, 수학에서는 집합을 나타냅니다. JSON·파이썬 dict에서는 키-값 객체를 감쌉니다.

[ ]
대괄호 · square bracket

배열·리스트의 표준 기호. 수학의 행렬과 구간 표기에서 출발했습니다. JSON에서는 순서 있는 배열을 뜻합니다.

< >
꺾쇠 · angle bracket

SGML의 후손인 HTML·XML에서 태그의 경계로 쓰입니다. 수학에서는 부등호(작다/크다)였습니다.

( )
소괄호 · parenthesis

파이썬에서 튜플을 만듭니다. JSON에는 튜플이 없어서, GoodFormat은 자동으로 [ ] 배열로 바꿉니다.

:
콜론 · colon

객체 안에서 키와 값을 가르는 구분자입니다. "key": value.

,
쉼표 · comma

항목을 구분합니다. JSON에서는 마지막 항목 뒤 쉼표(trailing comma)가 금지라 흔한 에러 원인이 됩니다.

" "
큰따옴표 · double quote

JSON에서 문자열과 키는 반드시 큰따옴표여야 합니다. 작은따옴표는 파이썬에선 되지만 JSON 표준에선 에러입니다.

true / null
리터럴 · literal

파이썬의 True·False·None이 JSON에서는 소문자 true·false·null입니다. 이름과 대소문자가 달라요.

JSON은 자바스크립트 객체 표기법에서 갈라져 나와 2000년대 초 더글러스 크록포드가 정리했고(ECMA-404 / RFC 8259), XML은 1998년 W3C가 SGML을 단순화해 권고안으로 발표했습니다.

형식 열전

누가 만들었고, 어디서 진짜 쓰는가
JSONJavaScript Object Notation

웹에서 데이터를 주고받는 사실상의 공용어. 가볍고 사람도 읽을 수 있어 XML을 밀어냈습니다.

탄생
2001년경 더글러스 크록포드가 자바스크립트 객체 리터럴에서 추려내 이름 붙임. 2006년 RFC 4627 → 2017년 RFC 8259 / ECMA-404로 표준화.
실사용
REST API 응답, 설정 파일, 토큰, 로그 등 웹 어디에나.
채택
대부분의 웹 APIpackage.jsonJWT 토큰MongoDB(BSON)

TMI — 크록포드는 "JSON을 발명한 게 아니라 발견했다"고 말합니다. 주석은 호환성 문제를 우려해 일부러 뺐고, 발음은 본인은 신경 안 쓴다지만 보통 "제이슨".

XMLeXtensible Markup Language

태그를 직접 정의할 수 있는 마크업. 강력하고 엄격해서 문서·엔터프라이즈 영역의 오랜 표준입니다.

탄생
1998년 2월 W3C가 1.0 권고안 발표. 1986년 ISO 표준 SGML을 웹용으로 단순화한 것.
실사용
문서·피드·설정·인증 등 구조가 복잡하고 엄격함이 필요한 곳.
채택
RSS·Atom 피드SVGOffice 문서(.docx)SOAP·SAML안드로이드 레이아웃

TMI.docx·.xlsx는 사실 XML 파일들을 zip으로 묶은 것입니다. 닫는 태그가 있어 같은 데이터면 JSON보다 용량이 큰 편이고, CDATA·네임스페이스 같은 강력하지만 복잡한 기능을 갖췄습니다.

Python dict파이썬 내장 자료형

교환 포맷이 아니라 언어 안의 자료구조입니다. 출력이 JSON과 닮았지만 규칙이 달라 그대로는 못 씁니다.

정체
파이썬의 해시맵(키-값) 자료형. print(d)·repr(d)이 만든 텍스트가 JSON처럼 보일 뿐.
차이
작은따옴표, True/False/None, 튜플 () — JSON엔 없는 것들.
실사용
파이썬 코드 전반로그·디버그 출력ORM 결과

TMIast.literal_eval()로 안전하게 다시 파이썬 객체로 되돌릴 수 있고, json.dumps()가 작은따옴표→큰따옴표·True→true 변환을 합니다. GoodFormat이 브라우저에서 하는 일과 같습니다.

사촌 포맷들알아두면 쓸모 있는 친척들
YAML
2001년 등장. 들여쓰기로 구조를 표현해 사람이 읽기 편함. 도커 컴포즈·GitHub Actions·쿠버네티스 설정에서 인기. YAML 1.2는 JSON을 포함하는 상위집합.
TOML
2013년, GitHub 공동창업자 톰 프레스턴워너가 만든 읽기 쉬운 설정 포맷. Rust의 Cargo, 파이썬 pyproject.toml이 채택.
NDJSON
한 줄에 JSON 하나씩(JSON Lines). 로그·스트리밍·대용량 처리에 유리.
JSON5
주석·트레일링 콤마·작은따옴표를 허용한 JSON 확장. 설정 파일에서 편의용으로 쓰임.

잡학 한 스푼

알면 어딘가 써먹는 TMI

"제이슨" vs "제이손"

발음에 공식 정답은 없습니다. 크록포드 본인은 "신경 안 쓴다"고 했지만 보통 "제이슨"으로 부릅니다.

JSON이 더 가볍다

같은 데이터라면 보통 JSON이 XML보다 용량이 작습니다. 닫는 태그가 없기 때문입니다.

큰 정수의 함정

JSON엔 정수·실수 구분이 없어, 아주 큰 정수는 자바스크립트 숫자 한계로 정밀도가 깨질 수 있습니다.

주석이 그리울 때

JSON에 메모를 남기고 싶으면 "_comment" 같은 가짜 키를 쓰는 관행이 있습니다. 정식 문법은 아닙니다.

보이지 않는 BOM

파일 맨 앞의 보이지 않는 바이트(BOM)가 JSON 파서를 깨뜨리기도 합니다. 인코딩은 BOM 없는 UTF-8이 무난합니다.

키 순서는 보장 안 됨

JSON 객체의 키 순서는 표준상 보장되지 않습니다. 대부분 구현이 입력 순서를 유지하지만 의존하면 위험합니다.

중복 키의 회색지대

{"a":1,"a":2}는 표준이 명시적으로 금지하진 않지만, 어느 값을 택할지는 파서마다 다릅니다.

XML은 루트가 하나

XML 문서는 최상위 요소가 반드시 하나여야 합니다. 형제 둘이 최상단에 나란히 오면 오류입니다.

JSON 에러 사전

에러 메시지를 그대로 검색해 왔다면

파서가 뱉는 에러 메시지를 통째로 검색하셨다면 여기서 찾아보세요. 메시지 원문과 원인·고치는 법을 모았습니다. 정확한 위치는 메시지의 line·column·position 숫자가 가리킵니다. 실제 메시지는 언어·런타임·버전마다 조금씩 다를 수 있습니다.

Python · json Expecting value: line 1 column 1 (char 0)
원인
빈 문자열이거나, JSON이 아닌 것(HTML·텍스트·None)을 파싱했습니다. 응답이 비었을 때 가장 흔합니다.
해결
응답이 실제 JSON인지·비어있지 않은지 먼저 확인. 파일은 json.load(f), 문자열은 json.loads(s) — 둘을 헷갈리지 마세요.
Python · json Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
원인
키에 큰따옴표가 없거나 작은따옴표를 썼습니다. 마지막 항목 뒤 콤마(trailing comma)도 이 에러를 냅니다.
해결
모든 키를 "큰따옴표"로. 파이썬 dict라면 위쪽 파이썬 dict 탭에 붙여 변환하세요.
Python · json Expecting ',' delimiter: line 1 column 17 (char 16)
원인
배열·객체의 항목 사이에 콤마가 빠졌습니다.
해결
메시지가 가리키는 위치 직전에 콤마를 추가하세요.
Python · json Expecting ':' delimiter: line 1 column 10 (char 9)
원인
객체에서 키와 값 사이의 콜론이 빠졌습니다.
해결
"key": value 형태로 콜론을 보충하세요.
Python · json Extra data: line 1 column 20 (char 19)
원인
JSON 하나가 끝난 뒤에 또 내용이 붙었습니다. 객체 두 개를 그냥 이어붙이면 납니다.
해결
값은 하나만 두거나, 여럿이면 [ ] 배열로 감싸거나 NDJSON(줄당 하나)으로 나누세요.
Python · json Unterminated string starting at: line 1 column 8 (char 7)
원인
문자열의 닫는 따옴표가 없습니다.
해결
짝 안 맞는 따옴표를 찾아 닫고, 문자열 안의 따옴표는 \"로 이스케이프하세요.
Python · json Invalid control character at: line 1 column 12 (char 11)
원인
문자열 안에 그대로 들어간 줄바꿈·탭 같은 제어문자가 있습니다.
해결
줄바꿈은 \n, 탭은 \t로 이스케이프하세요.
JavaScript · JSON.parse Unexpected token '<', "<!DOCTYPE..." is not valid JSON
원인
JSON 대신 HTML이 왔습니다. API가 404·500 에러 페이지나 로그인 페이지를 돌려준 경우가 대부분입니다.
해결
네트워크 탭에서 실제 응답을 확인. Content-Typetext/html이면 JSON이 아닙니다. URL·인증을 점검하세요.
JavaScript · JSON.parse Unexpected token 'X', "..." is not valid JSON
원인
작은따옴표·따옴표 없는 키·trailing comma 등 자바스크립트 객체 문법을 JSON으로 넘겼습니다.
해결
큰따옴표·콤마를 정리하세요. 메시지의 position 숫자가 깨진 위치(처음부터 센 글자 수)입니다.
JavaScript · JSON.parse Unexpected end of JSON input
원인
입력이 비었거나 중간에 잘렸습니다. JSON.parse("")이거나 응답이 끊긴 경우.
해결
빈·잘린 응답인지 확인. 닫는 괄호 }·] 누락도 이 에러를 냅니다.
JavaScript · JSON.parse Unexpected token 'u', "undefined" is not valid JSON
원인
undefined를 파싱했습니다. 없는 값이나 빈 localStorage 키가 문자열 "undefined"로 변환된 것.
해결
파싱 전 값이 실제 JSON 문자열인지 확인. 저장할 땐 JSON.stringify()를 먼저 거치세요.
JavaScript · Firefox JSON.parse: unexpected character at line 1 column 1 of the JSON data
원인
위와 같은 문제지만 파이어폭스식 메시지입니다. 첫 글자부터 JSON이 아니란 뜻.
해결
응답 내용을 직접 찍어 확인. HTML·빈 문자열·작은따옴표 객체가 흔한 범인입니다.

자주 묻는 질문

겉모습은 비슷하지만 규칙이 다릅니다. 파이썬은 작은따옴표를 쓰고 True/False/None·튜플을 허용하지만, JSON은 큰따옴표만 쓰고 true/false/null에 튜플이 없습니다. GoodFormat은 파이썬 dict를 붙여넣으면 이 차이를 자동으로 변환해 줍니다.

JSON 표준(RFC 8259)이 문자열과 키를 큰따옴표로만 쓰도록 못 박았기 때문입니다. {'a':1}은 파이썬 문법이라 대부분의 JSON 파서가 거부합니다. JSON으로 보낼 거라면 큰따옴표로 바꿔야 합니다.

JSON 명세가 trailing comma를 허용하지 않습니다. [1, 2, 3,] 처럼 마지막 쉼표가 남으면 파싱이 실패합니다. 자바스크립트·파이썬 코드에선 되지만 JSON 데이터에선 빼야 합니다.

JSON에는 주석 문법이 아예 없습니다. 설계 단계에서 의도적으로 제외됐는데, 주석에 파서 지시문 같은 걸 끼워 넣어 호환성이 깨지는 걸 막기 위해서였습니다. 주석이 필요하면 JSON5·JSONC 같은 변형을 쓰거나 별도 필드에 메모를 담습니다.

유니코드 이스케이프 표기일 뿐 데이터는 멀쩡합니다. 파이썬에서 json.dumps(..., ensure_ascii=False)로 저장하면 한글이 그대로 보입니다. GoodFormat은 파싱 후 다시 출력하므로 한글이 정상적으로 표시됩니다.

텍스트 뷰는 들여쓰기로 펼친 결과를 그대로 보여줘 복사·붙여넣기에 좋고, 트리 뷰는 중첩 구조를 접고 펼치며 탐색하기에 좋습니다. 깊고 복잡한 데이터에서 특정 가지만 들여다볼 때 트리가 편합니다.

아니요. 정리·변환은 전부 여러분의 브라우저 안에서만 처리되고, 입력 내용은 서버로 전송되지 않습니다. 다만 아래 "한마디" 댓글에 직접 적어 등록한 내용은 저장되니, 민감한 데이터를 댓글에 붙여넣지는 마세요.

⚠️ 읽어두기

GoodFormat은 빠르게 확인하고 정리하기 위한 편의 도구입니다. 출력이 모든 환경·파서에서 100% 호환된다고 보장하지 않으며, 위 도감·열전·FAQ·잡학의 설명은 이해를 돕기 위한 일반적인 정리라 일부 예외나 엣지 케이스가 있을 수 있습니다. 중요한 데이터라면 실제로 사용할 파서로 한 번 더 검증하시고, 정확한 표준 정의가 필요하면 각 공식 명세(RFC 8259, W3C XML 1.0 등)를 직접 참고하세요. 입력 내용은 서버로 전송되지 않습니다.

한마디

로그인 없이, 닉네임만
0/500
  • 아직 한마디가 없습니다. 첫 댓글을 남겨보세요.
광고