본문 바로가기

JSON 정렬하기

한 줄로 길게 이어진 JSON을 읽을 수 있게 바꾸거나 다시 압축하세요. 큰 숫자도 모든 자릿수를 유지합니다. 대부분의 온라인 포맷터가 조용히 틀리는 부분입니다. 아무것도 저장하지 않습니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음
들여쓰기
정렬 결과

정렬된 JSON이 여기에 표시돼요.

사용 방법

1

JSON 붙여넣기

또는 .json 파일을 끌어다 놓으세요. 붙여 넣은 내용은 이 페이지 안에만 있으며, 아무것도 저장하지 않습니다.

2

들여쓰기 선택

공백 2칸, 4칸, 탭, 또는 한 줄로 압축. 선택은 다음을 위해 기억됩니다.

3

복사 또는 다운로드

결과를 복사하거나 파일로 저장하세요. JSON이 깨져 있으면 대신 줄, 열, 문자 위치를 알려 드립니다.

왕복 변환 후에도 남는 것

포맷은 파싱과 재출력이며, 입력한 텍스트 그대로 유지되는 것은 숫자뿐입니다. 이는 배너가 세는 큰 정수의 경우보다 범위가 넓습니다. JavaScript의 가장 짧은 표기가 입력한 표기와 다른 숫자는 모두 원본에서 그대로 다시 출력되므로, 1.10은 끝의 0을 유지하고, 1e5는 지수 형식 그대로이며, 음의 0은 음수로 남습니다. 경고에는 안전하지 않은 정수만 집계합니다. 다른 방법을 택했을 때 표기가 정리되는 정도가 아니라 조용한 데이터 손상이 일어나는 것이 바로 그런 숫자이기 때문입니다.

문자열은 텍스트 그대로 유지되지 않습니다. 이스케이프는 문서를 읽을 때 해석되고 출력할 때 새로 쓰이므로, \u0041은 A로 나오고 이스케이프된 슬래시는 그냥 슬래시로 나옵니다. 값은 같지만 바이트는 다르며, 이는 딱 한 가지 상황에서만, 그러나 그 상황에서는 크게 중요합니다. 다음 단계에서 두 JSON 파일을 바이트 단위로 비교한다면, 그중 하나를 포맷터에 통과시키는 것은 아무 변화 없는 작업이 아닙니다.

재정렬 결과를 믿기 전에 알아 둘 객체 수준의 동작이 두 가지 있습니다. 중복 키는 조용히 처리되며, 마지막 값이 남습니다. 브라우저 자체 파서가 처리하는 방식과 똑같습니다. “id” 필드가 두 개 있는 문서도 아무 경고 없이 정렬되어 하나만 남고, 다른 하나가 있었다는 사실은 어디에도 표시되지 않습니다. 그리고 키 순서는 정수가 아닌 키에 대해서만 파일의 순서를 따릅니다. “1”, “2”, “name”을 가진 객체는 숫자 키가 숫자 순서대로 먼저 나옵니다. JavaScript 자체가 객체 속성을 그렇게 정렬하기 때문입니다. 일반 키는 작성한 순서를 유지합니다.

다른 작업이 필요할 때

가진 파일이 tsconfig.json, ESLint 설정, VS Code 설정 파일이라면 이 페이지는 주석과 후행 쉼표를 피해 가며 정렬하지 않고 짚어 줍니다. JSON 도구로서는 옳은 답이지만 그 파일에는 맞지 않는 도구입니다. 그런 파일은 JSONC이며 편집기가 이미 파싱할 줄 압니다. 명령줄에서는 json5와 dasel이 JSON인 척하지 않고 이를 읽습니다.

다시 들여쓰는 것 이상이라면 포맷터는 맞지 않는 형태의 도구입니다. jq는 붙여넣기 창으로는 할 수 없는 일을 식 하나로 해냅니다. jq -S .는 모든 객체의 키를 정렬해 두 응답을 비교할 수 있게 하고, jq 'del(.token)'은 페이로드를 누군가에게 보여 주기 전에 필드를 제거하며, jq -c는 객체 배열을 파이프라인이 원하는 JSON Lines로 압축합니다. 또한 클립보드가 아니라 파일을 읽으므로, 문서가 편하게 선택할 수 있는 크기를 넘으면 그 차이가 큽니다.

자주 묻는 질문

제 JSON이 어딘가에 저장되나요?

아니요. 서버 호출도, 로그 기록도 없으며 아무것도 저장하지 않습니다. 페이지를 불러온 뒤 인터넷 연결을 끊어도 계속 작동합니다. 이 점은 생각보다 중요합니다. 사람들이 온라인 포맷터에 붙여 넣는 것은 API 응답, 설정 파일, 오류 페이로드이며, 여기에는 토큰, 고객 기록, 내부 호스트 이름이 흔히 들어 있습니다.

다른 포맷터와 달리 여기서는 왜 큰 숫자가 정확히 유지되나요?

거의 모든 다른 포맷터가 큰 숫자를 조용히 망가뜨리기 때문입니다. JavaScript의 숫자는 64비트 부동소수점이라 정수는 9,007,199,254,740,991까지만 정확히 담을 수 있습니다. 그보다 큰 수(Twitter/X 게시물 ID, Discord 스노플레이크, 은행 계좌 번호, 64비트 데이터베이스 키)는 `JSON.parse`를 거치는 순간 끝자리를 잃습니다. 숫자가 여전히 그럴듯해 보인다는 점이 위험합니다. 7205759403792793600이 조용히 7205759403792793000이 됩니다. 이 페이지는 붙여 넣은 자릿수를 정확히 그대로 유지하고, 보호해야 했던 숫자가 몇 개인지 알려 줍니다.

깨진 파일은 어떻게 처리하나요?

문제가 있다는 사실만이 아니라 문제가 어디에 있는지 알려 줍니다. 줄 번호, 열, 문제 문자 아래에 캐럿(^)을 표시한 해당 줄, 그리고 “Unexpected token” 대신 “} 앞의 후행 쉼표”처럼 쉬운 말로 된 설명을 보여 줍니다. 후행 쉼표, 작은따옴표, 따옴표 없는 키, 문자열 안의 이스케이프되지 않은 줄바꿈, 이 네 가지가 깨진 JSON의 대부분을 차지하며, 각각을 구체적으로 짚어 줍니다.

JSON Lines / NDJSON도 처리하나요?

네, 형태도 유지합니다. JSON Lines는 한 줄에 완전한 JSON 값 하나를 담는 형식으로 로그와 데이터 내보내기에 쓰이며, 이를 여러 줄로 펼쳐 정렬하면 이 형식의 쓸모 자체가 사라집니다. 자동으로 감지해 각 줄을 따로 정렬하고, 한 줄에 값 하나인 구조를 유지합니다.

주석이나 후행 쉼표가 있는 JSON을 고칠 수 있나요?

정확히 짚어 주지만 조용히 받아들이지는 않습니다. 주석과 후행 쉼표는 JSON이 아니라 JSON5나 JSONC이며, tsconfig.json 같은 설정 파일이 실제로 쓰는 형식입니다. 이를 조용히 받아들이는 포맷터는 결국 파서가 거부할 파일을 건네주게 되며, 이는 여기서 오류를 보는 것보다 나쁩니다.

용량 제한이 있나요?

저희가 정한 한도가 아니라 사용 가능한 메모리가 한계입니다. 몇 MB짜리 문서는 즉시 정렬되며, 매우 큰 문서는 저희 쪽의 어떤 제한이 아니라 한 번에 메모리에 담을 수 있는 양에 따라 제한됩니다.

압축하면 데이터가 바뀌나요?

아니요. 압축은 토큰 사이의 공백만 제거합니다. 키 순서를 바꾸거나, 숫자 형식을 바꾸거나, 무엇을 빼는 일은 절대 없습니다. 결과는 더 작을 뿐 파싱하면 정확히 같은 값입니다.

참고: 포맷은 정확합니다. 문서를 파싱한 뒤 다시 출력하므로, 파싱되는 것은 모두 그대로 나옵니다. 엄격한 JSON만 받습니다. 주석, 후행 쉼표, 따옴표 없는 키는 조용히 고치지 않고 거부합니다. 고치려면 추측해야 하기 때문입니다. 매우 큰 문서는 포맷하는 동안 메모리에 두 번 올라갑니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.