JSON 포맷터 · 압축기

JSON을 들여쓰기해 읽기 좋게 펴거나, 공백을 걷어내 한 줄로 줄입니다. 틀린 JSON이면 어디가 문제인지 줄·칸과 함께 그 줄을 보여 줍니다 — 「어딘가 틀렸다」는 말은 긴 파일에서 아무 도움이 안 되기 때문입니다.

들여쓰기

붙여넣은 코드는 기기를 벗어나지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다.

JSON 은 자바스크립트 객체가 아닙니다

생김새가 닮아서 자바스크립트에 적던 버릇이 그대로 따라옵니다. 키는 반드시 큰따옴표로 감싸야 하고, 홑따옴표는 문자열에도 쓸 수 없습니다. 마지막 항목 뒤의 쉼표, // 주석, undefined 와 NaN 도 표준에 없습니다. 이 검사기는 그런 실수를 「예상 밖의 글자」로 뭉뚱그리지 않고 홑따옴표인지, 뒤따르는 쉼표인지, 따옴표 없는 키인지까지 가려 말합니다 — 무엇이 틀렸는지 알아야 고칠 수 있기 때문입니다.

위치는 직접 훑어서 찾습니다

브라우저의 JSON.parse 는 거절만 할 뿐 자리를 믿을 만하게 알려 주지 않습니다. 그래서 거절당하면 작은 검사기가 처음부터 다시 훑어 몇 번째 글자에서 어긋났는지 찾고, 그것을 줄·칸으로 옮겨 그 줄과 화살표를 함께 보여 줍니다. 문자열 안에 줄바꿈을 그대로 넣은 것, \u 뒤에 16진수 넉 자가 없는 것, 500겹을 넘는 중첩처럼 눈으로는 못 찾는 것도 여기서 걸립니다.

값은 그대로지만 표기는 바뀔 수 있습니다

한 번 읽어서 다시 쓰는 방식이라 뜻은 보존됩니다. 다만 숫자는 자바스크립트의 숫자로 읽히므로 1.0 은 1 이 되고 1e3 은 1000 이 됩니다. 2^53 을 넘는 정수 — 스노플레이크 ID 나 64비트 키 — 는 끝자리가 조용히 바뀌니 그런 값은 문자열로 담아야 합니다. \u00e9 같은 이스케이프는 실제 글자로 풀리고, 같은 키가 두 번 나오면 뒤엣것만 남습니다. 결과의 크기는 UTF-8 바이트로 세므로 한글 한 자가 3바이트입니다.

1줄 1칸에서 걸리는 보이지 않는 글자

파일 머리의 BOM 은 공백이 아니라 글자라 첫 줄 첫 칸에서 예상 밖의 글자로 걸리는데, 화살표가 가리키는 자리에는 아무것도 안 보입니다. 윈도 메모장이 저장한 파일이 대개 이렇습니다. 한 줄에 객체 하나씩 쌓은 JSON Lines 는 문서 하나가 아니라서 둘째 줄 첫 칸에서 걸립니다 — 한 줄씩 넣거나 [ ] 로 감싸고 사이에 쉼표를 넣으세요. 반대로 "글자" 나 123 처럼 객체가 아닌 값 하나도 규격상 JSON 이라 그대로 통과합니다.

펴진 모양과 긴 결과

들여쓰기는 두 칸과 네 칸 중 고릅니다. 빈 배열과 빈 객체는 []·{} 로 한 줄에 남고, 값이 하나라도 들면 원소마다 한 줄을 차지합니다 — 숫자 만 개짜리 배열은 만 줄이 됩니다. 결과가 4,000줄을 넘으면 줄 번호를 접고 통짜로 그리는데 글과 복사는 그대로입니다. 결과를 넣는 칸으로 올려 보내 다시 줄일 수도 있습니다.

자주 묻는 질문

어디가 틀렸는지 정확히 알려 주나요?

네. 브라우저가 주는 오류 문구는 믿기 어렵습니다 — 크롬은 입력이 짧으면 위치를 아예 빼고 원문 조각만 넣고, 브라우저마다 말이 다릅니다. 그래서 직접 훑어 몇 번째 글자에서 어긋났는지 찾고 줄·칸으로 바꿔 보여 줍니다. 홑따옴표를 썼거나 뒤따르는 쉼표가 남은 것처럼 흔한 실수는 그 이유까지 적어 줍니다.

키 순서가 바뀌나요?

바뀌지 않습니다. 적힌 순서 그대로 다시 씁니다. 다만 JSON 표준에서 객체의 키 순서는 뜻이 없으므로, 순서에 기대는 코드가 있다면 그쪽을 고치는 편이 안전합니다.

주석이 든 JSON 도 되나요?

표준 JSON 에는 주석이 없습니다. tsconfig.json 처럼 주석을 허용하는 파일은 그 부분에서 걸리므로, 주석을 지우고 넣으세요.

아주 큰 파일도 되나요?

이 기기의 메모리 안에서 처리하므로 수십 MB 짜리를 넣으면 브라우저가 버거워합니다. 그런 파일은 필요한 부분만 잘라 넣는 편이 빠릅니다.

결과에 줄 번호가 없습니다.

4,000줄을 넘으면 번호를 접습니다. 줄마다 칸을 만들어 그리는 방식이라 수만 줄이면 브라우저가 무거워지기 때문입니다. 글은 전부 있고 복사도 됩니다. 번호가 꼭 필요하면 편집기에 붙여넣으세요.

붙여넣은 코드가 서버로 가나요?

가지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다. 인터넷을 끊고도 동작합니다.