이 도구는 JSON 문서의 객체 키를 정렬해서 다시 써 줍니다. 내용이 같은 두 문서가 똑같이 읽히게 되므로 diff, 코드 리뷰, 스냅샷 파일이 안정되고 긴 설정 파일도 훑어보기 쉬워집니다. 배열 항목의 순서는 데이터이므로 그대로 두되, 모든 단계를 정렬할 때는 배열 안의 객체도 키를 정렬합니다.
방향(A → Z 또는 Z → A), 키 비교 방식(코드 단위, 자연 정렬, 대소문자 무시), 정렬 깊이(모든 단계 또는 최상위만), 출력 들여쓰기(공백 2칸, 4칸, 탭, 압축)를 고를 수 있습니다. 비교는 텍스트에 적힌 실제 키 순서 위에서 이루어지므로, 자바스크립트 객체라면 앞으로 밀려 올라갈 "10"이나 "2" 같은 정수형 키도 정렬 규칙이 정한 자리에 놓입니다.
숫자 표기는 그대로 유지되어(1.0은 1.0, 9007199254740993도 반올림하지 않음) 중복 키는 참고 메시지로 알려 줍니다. 모든 처리는 브라우저 안에서 이루어지고 서버로 전송되지 않으며 입력은 최대 20MiB입니다. 200,000자를 넘는 입력은 worker에서 처리합니다. 1,000,000자를 넘으면 입력 편집기 대신 크기와 줄 수 요약을 보여 줍니다.
사용 방법
JSON 붙여넣기 또는 파일 열기
문서를 붙여넣거나 편집기에 파일을 끌어다 놓거나 최대 20MiB 파일을 엽니다. 문법 오류는 줄·열과 오류 위치로 이동 버튼과 함께 표시됩니다.
순서와 비교 방식 선택
순서를 A → Z 또는 Z → A로, 키 비교를 코드 단위, 자연 정렬(
item2가item10보다 앞), 대소문자 무시 중에서 고릅니다.깊이와 들여쓰기 선택
깊이는 모든 단계 또는 최상위만입니다. 들여쓰기는 공백 2칸, 4칸, 탭, 한 줄로 만드는 압축 중에서 고릅니다.
결과와 참고 메시지 확인
정렬된 문서가 바로 나타나고 정렬한 키의 개수도 표시됩니다. 입력에 같은 키가 반복되면 참고 메시지가 나옵니다.
복사, 다운로드, 다시 정렬
결과를 복사하거나
sorted.json으로 내려받습니다. 결과를 입력으로를 누르면 출력이 편집기로 옮겨져, 그 위에 다른 비교 방식을 시험해 볼 수 있습니다.
작동 원리
키 비교 방식
코드 단위는 키를 UTF-16 코드 단위로 비교하는 것으로, 자바스크립트 문자열의 < 비교와 같습니다. 로케일과 무관해서 어느 기기에서나 같은 순서가 나오지만, 대문자가 소문자보다 앞에 오고 "10"이 "2"보다 앞에 오며 악센트 문자는 z 뒤로 갑니다. 자연 정렬은 숫자 덩어리를 숫자로, 글자는 기본 글자로 비교하므로 item2가 item10보다 앞에 오고 é는 e 옆에 놓입니다. 대소문자 무시는 소문자로 바꾼 키를 비교하고 같으면 코드 단위로 가립니다. 어느 방식이든 내림차순은 정확히 그 반대입니다.
같은 여덟 개의 키 item10, item2, B, a, é, 10, 2, b는 이렇게 정렬됩니다.
| 키 비교 | 결과(A → Z) |
|---|---|
| 코드 단위 | 10, 2, B, a, b, item10, item2, é |
| 자연 정렬 | 2, 10, a, B, b, é, item2, item10 |
| 대소문자 무시 | 10, 2, a, B, b, item10, item2, é |
| 코드 단위, Z → A | é, item2, item10, b, a, B, 2, 10 |
정렬되는 것과 유지되는 것
순서가 바뀌는 것은 객체의 키뿐입니다. 모든 단계를 고르면 배열 안으로 들어가 거기서 만나는 객체의 키도 정렬하지만, 배열 항목의 위치는 그대로입니다. 최상위만을 고르면 루트 객체의 키만 정렬하고 그 아래는 적힌 그대로 복사하며, 루트가 배열인 문서는 바뀌지 않습니다.
키 순서와 숫자 원문을 보존하는 파서로 읽기 때문에 입력과 출력은 키 순서와 배치만 다릅니다. 문자열 내용은 표준 이스케이프로 다시 쓰이고(\u00e9는 é로 바뀜), 반복된 키는 모두 남아 정렬 뒤에 나란히 놓입니다.
정렬된 키는 정규형 JSON이 아님
키 정렬은 정규형으로 가는 한 단계이고, 코드 단위 순서는 RFC 8785(JSON 정규화 방식, JCS)가 쓰는 키 순서와 같습니다. 하지만 이 도구는 숫자를 정규화하지 않고(1.0은 1.0으로 남음) 압축을 고르지 않으면 공백도 지우지 않습니다. 정규형 JSON에 서명하거나 해시를 계산해야 한다면 JCS 구현을 쓰세요.
실제 예시
{"zebra":1,"apple":{"y":2,"x":1},"mango":[{"d":1,"c":2}],"ratio":1.0}{
"apple": {
"x": 1,
"y": 2
},
"mango": [
{
"c": 2,
"d": 1
}
],
"ratio": 1.0,
"zebra": 1
}모든 객체의 키가 정렬되고 배열 항목은 그대로이며 1.0의 소수점 표기도 유지됩니다.
{"b":1,"10":2,"2":3,"a":4}{
"10": 2,
"2": 3,
"a": 4,
"b": 1
}코드 단위 순서는 텍스트로 비교하므로 "10"이 "2"보다 앞에 옵니다. 키는 자바스크립트 객체처럼 앞으로 밀려 올라가지 않고 정렬 결과의 자리에 놓입니다.
{"item10":1,"item2":2,"Item3":3,"item1":4}{
"item1": 4,
"item2": 2,
"Item3": 3,
"item10": 1
}키 비교를 자연 정렬로 한 결과입니다. 숫자 덩어리는 숫자로 비교하고 기본 순서에서는 대소문자를 무시하므로 item1, item2, Item3, item10이 됩니다.
{"b":1,"A":2,"a":3,"C":4}{
"A": 2,
"a": 3,
"b": 1,
"C": 4
}키 비교를 대소문자 무시로 한 결과입니다. A와 a가 이웃하고 둘 사이는 코드 단위로 갈립니다. 기본 순서라면 A, C, a, b가 됩니다.
{"b":{"z":1,"y":2},"a":0,"c":[3,{"n":1,"m":2}]}{"c":[3,{"n":1,"m":2}],"b":{"z":1,"y":2},"a":0}순서 Z → A, 깊이 최상위만, 들여쓰기 압축으로 한 결과입니다. 루트의 키만 움직이고 중첩된 키는 적은 그대로입니다.
{"id":9007199254740993,"b":1,"a":2,"b":3}{
"a": 2,
"b": 1,
"b": 3,
"id": 9007199254740993
}큰 정수는 반올림되지 않고 두 b 항목이 나란히 남으며, 중복 키 1개(b)가 있다는 참고 메시지가 표시됩니다.
자주 하는 실수
기본 순서가 의외일 수 있음
코드 단위 순서에서는
Zebra가apple보다 앞에 오고,10이2보다 앞에 오고,é가z뒤로 갑니다. 사전식 순서나 숫자 크기순을 기대한다면 키 비교를 대소문자 무시나 자연 정렬로 바꾸세요.배열은 정렬하지 않음
[3,1,2]는[3,1,2]그대로이고, 레코드 목록도 각 레코드의 키만 정렬될 뿐 순서는 유지됩니다. 배열 항목을 정렬하면 데이터의 의미가 바뀌므로 이 도구는 하지 않습니다.최상위만은 나머지를 건드리지 않음
최상위만을 고르면 중첩된 객체는 원래 키 순서를 유지하고, 루트가 배열인 문서는 전혀 바뀌지 않습니다. 문서 전체를 정렬하려면 모든 단계를 쓰세요.
중복 키는 그대로 남음
{"b":1,"a":2,"b":3}은a,b,b순으로 정렬되고 반복된 키가 참고 메시지에 나옵니다. 대부분의 소비자는 마지막 값을 쓰므로 정렬에 기대지 말고 데이터를 고치세요.키 순서에 의미가 있을 수 있음
손으로 쓴 설정 파일은
name이나version을 일부러 앞에 두기도 하고, 객체를 순서대로 읽는 도구도 있습니다. 사람이나 프로그램이 그 배치에 의존한다면 복사본을 정렬하고 원본은 보관하세요.
자주 묻는 질문
배열도 정렬해 주나요?
아니요. 객체의 키만 정렬합니다. 배열 항목은 제자리에 있고, 모든 단계를 고르면 배열 안 객체의 키가 각각 정렬됩니다.
기본 정렬 순서는 어떻게 되나요?
UTF-16 코드 단위 기준 오름차순입니다. 대문자가 소문자보다, 숫자가 글자보다 앞에 오고 "10"이 "2"보다 앞에 옵니다. 더 직관적인 순서는 자연 정렬이나 대소문자 무시로 고르세요.
item2가 item10보다 앞에 오게 하려면?
키 비교를 자연 정렬로 바꾸세요. 숫자 덩어리를 숫자로 비교하므로 item2가 item10보다 앞에 옵니다.
대소문자를 구분하지 않고 정렬할 수 있나요?
네, 대소문자 무시를 고르면 됩니다. 대소문자만 다른 키는 서로 옆에 놓이고 코드 단위로 순서가 갈립니다(A가 a보다 앞).
정렬하면 숫자나 값이 바뀌나요?
아니요. 1.0이나 9007199254740993 같은 숫자 표기는 적은 그대로 복사되며 키 순서와 배치만 바뀝니다. 문자열 값은 표준 이스케이프로 다시 쓰입니다.
최상위만 정렬하거나 압축된 결과를 받을 수 있나요?
네. 깊이에서 모든 단계 또는 최상위만을, 들여쓰기에서 공백 2칸, 4칸, 탭, 압축을 고를 수 있습니다.
결과가 RFC 8785 정규형 JSON인가요?
그것만으로는 아닙니다. 코드 단위 순서는 RFC 8785의 키 순서와 같지만 숫자를 정규화하지 않고 공백도 들여쓰기 선택을 따르므로, 서명이나 해시에는 JCS 라이브러리를 쓰세요.
데이터가 업로드되나요?
아니요. 문서는 브라우저 탭 안에서 해석하고 정렬합니다. 입력은 최대 20MiB입니다.
마지막 업데이트:
