Command Palette

Search for a command to run...

JSON 분류기: 깨끗하고 다양한 파일을 위해 알파벳순으로 JSON 키를 정렬합니다

JSON 분류기: 깨끗하고 다양한 파일을 위해 알파벳순으로 JSON 키를 정렬합니다

T
Toolz Team
|Aug 23, 2026|16 최소 읽기

데이터 도구 모음의 일부

풀 요청에는 240 개의 라인이 변경되었고 정확히 두 값을 터치했습니다. 그 순간 JSON 키를 정렬하는 것에 대해 진지하게 생각했습니다. 팀원이 키를 재정렬 한 포맷터를 통해 구성 파일을 실행했고 그 값 중 두 개를 손으로 편집했으며 결과 diff 는 읽을 수없는 빨간색과 녹색의 벽으로 238 개의 라인이 단순히 이동 한 키였습니다. 내 리뷰어는 당연히 다시 실행하도록 요청했습니다. 실제 변경 사항은 소음 내부에서 보이지 않았습니다.

나는 [Toolz.dev](/를 실행하고 또한 내가 안에 살고 있다는 것을 의미 라라벨과 워드 프레스 프로젝트를 구축 package.json, composer.json, tsconfig.json, 번역 카탈로그, 그리고 버전 제어에 전념 얻을 백 다른 JSON 파일. 예측할 수없는 키 순서와 JSON 파일은 그 모든 하나에 작은, 반복 세금입니다. 안정적인 알파벳 순서로 키를 정렬하는 것은 수정이며, 그것은 당신에게 낭비 코드 검토를 저장 처음까지 미용 보이는 그 변화 중 하나입니다. 이 가이드는 JSON 키를 정렬 할 때,하지 않을 때,아무것도 깨지 않고 수행하는 방법을 다룹니다.

TL;DR: JSON 분류기는 object's 키를 알파벳 순서로 재정렬하고 결과를 다시 직렬화합니다. 키 순서는 JSON 의 의미를 변경하지 않습니다. 왜냐하면 개체는 JSON 표준에 의해 순서가 지정되지 않기 때문입니다. 하지만 일관된 순서는 파일을 읽을 수 있게 만들고 변경된 값만 표시하는 깔끔한 버전 제어 diff 를 생성합니다. 중첩된 개체에 도달하도록 재귀적으로 정렬하고,배열이 순서대로 지정되므로 배열 순서를 기본적으로 유지하며,오름차순 또는 내림차순,예쁘거나 축소된 출력을 선택합니다. The JSON 소터 브라우저에서 완전히 실행됩니다.

JSON 선별기란 무엇입니까?

JSON 분류기는 JSON 객체를 가져와서 키를 알파벳 순서로 재배열한 다음 객체를 다시 씁니다. 값은 건드리지 않았습니다. 키가 나타나는 순서만 변경되며 이는 안전하기 때문입니다 RFC 8259 객체를 순서가 없는 컬렉션으로 정의합니다: 키 재정렬은 문서의 의미를 변경할 수 없습니다. 그래서 {"name":"toolz","author":"Liton"} 된다 {"author":"Liton","name":"toolz"}. 기본적으로 정렬은 재귀적입니다. 즉, 모든 중첩된 개체 내부의 키도 가장 깊은 수준까지 정렬됩니다.

그것이 전체 작업이고,그 단순함이 포인트입니다. 여러분은 데이터를 변환하거나,스키마를 검증하거나,형식을 변환하는 것이 아닙니다. 여러분은 임의의 것을 가졌던 것에 예측가능한 순서를 부과하고 있습니다. 다른 모든 이점들,가독성, 비교가능성,깨끗한 diffs,은 그 하나의 예측가능한 순서에서 흘러나옵니다.

정렬 키가 내 JSON의 의미를 변경합니까?

아니오,그리고 이것이 정렬을 안전하게 만드는 사실입니다. JSON 표준인 ECMA-404 에서 객체는 이름과 값 쌍의 순서가 없는 컬렉션으로 정의됩니다. 사양은 해당 쌍의 순서가 중요하지 않다는 것을 명시합니다. 모든 준수 파서는 읽습니다 {"a":1,"b":2} 그리고 {"b":2,"a":1} 정확히 같은 데이터로. 당신의 프로그램이 할 때 config.timeout 또는 data["name"], 이름으로 키를 조회합니다; 해당 키가 작성된 개체의 어디에 있는지 전혀 신경 쓰지 않습니다.

누군가가 항상 묻기 때문에 명확하게 언급 할 가치가있는 한 가지주의 사항이 있습니다. 소수의 시스템은 JSON 개체를 주문한 것처럼 남용하여 표시 또는 처리를위한 삽입 순서에 의존합니다. 그것은 형식의 속성이 아니라 형식의 오용이지만 제어하지 않는 시스템을 공급하는 경우 검사 할 수없는 파이프 라인에 정렬 된 파일을 커밋하기 전에 테스트하십시오. 압도적 인 대다수의 실제 JSON 에 대해 구성 파일,API 페이로드,잠금 파일,번역 카탈로그,정렬 키는 의미에 영향을 미치지 않는 순전히 표현 적 변경입니다.

배열은 반대의 경우이며,구분이 중요합니다. JSON 배열은 정의에 따라 정렬되며,그 순서는 자주 의미를 전달합니다: 일련의 단계,순위 목록,위치 1 이 경도이고 위치 2 가 위도인 좌표 집합 배열을 재정렬하면 데이터가 말하는 것을 자동으로 변경할 수 있습니다. 그렇기 때문에 이 도구는 기본적으로 배열 순서를 보존하고 명시적으로 요청할 때만 배열을 정렬하며,심지어 요소가 모두 문자열이거나 모든 숫자인 배열에 대해서만 정렬합니다.

왜 JSON 키를 정렬해야 합니까?

헤드라인 이유는 깔끔한 diffs 이며,제가 작업하는 방식을 바꾼 것이 바로 버전 관리 도구입니다. 파일을 한 줄씩 비교합니다. 동일한 데이터를 나타내는 두 파일이 서로 다른 순서로 키를 쓸 때 diff 는 변경된 값이 아닌 이동한 키로 가득 차 있습니다. 모든 JSON 파일이 정렬된 키로 작성되고 문제가 사라지는 규칙을 채택하십시오: 두 버전의 파일은 값이 실제로 다른 경우에만 다르므로 검토자는 실제 변경 사항을 즉시 확인합니다. 이것이 바로 많은 린터와 포맷터가 정렬 키 옵션을 제공하는 이유이며,이러한 도구가 jq 정렬 키 플래그를 발송합니다.

두 번째 이유는 인간의 가독성입니다. 특정 설정을 찾기 위해 큰 구성 파일을 스캔할 때 알파벳 순서로 볼 위치를 알려줍니다. 전체 파일을 읽지 않습니다; 사전에서와 같이 대략적으로 키가 있어야 하는 위치로 이동합니다. 80개의 키가 있는 파일에서는 2초 조회와 전체 스캔의 차이가 있습니다.

세 번째 이유는 파일 간 비교 가능성입니다. 프로젝트에 모두 공통 구조를 공유해야 하는 10 개의 JSON 파일이 있는 경우,모두 동일한 방식으로 정렬하면 키가 누락되었는지 또는 추가 키가 있는지 여부를 눈알로 보는 것이 사소합니다. 다른 위치에 숨기는 대신 서로 옆에 발산이 정렬됩니다.

네 번째 이유는 표준화입니다. 일부 워크플로에는 JSON 값을 안정적이고 결정론적으로 표현해야 합니다. 예를 들어 직렬화 방법에 관계없이 두 페이로드를 해시하거나 캐시하거나 동일성을 위해 비교하는 등의 작업이 필요합니다. 키를 정렬하는 것은 표준 형식을 향한 한 단계이지만 전체 표준 JSON은 공백과 숫자 형식도 정규화합니다.

JSON Sorter 를 어떻게 사용합니까?

JSON을 입력 상자에 붙여넣습니다 JSON 소터또는 샘플을 로드하여 출력의 모양을 확인합니다. 입력이 유효한 JSON 이어야 합니다. 그렇지 않은 경우 도구는 위치와 함께 구문 분석 오류를 보고하므로 정렬하기 전에 길 잃은 쉼표나 닫히지 않은 브래킷을 수정할 수 있습니다.

그런 다음 정렬이 실행되는 방식을 선택합니다. A 에서 Z 로 오름차순을 선택하거나 Z 에서 A 로 내림차순을 선택합니다. 기본적으로 켜져 있는 대소문자를 접을지 여부를 결정합니다 Name, name, 그리고 NAME 대문자가 원시 문자 순서로 소문자 앞에 정렬되기 때문에 분리되지 않고 함께 앉습니다. 거의 항상 원하는 중첩된 개체로 내려갈지,아니면 최상위 수준만 정렬할지 선택합니다. 문자열 배열이나 숫자도 정렬하려면 배열 정렬을 켜십시오; 혼합 배열과 개체 배열은 항상 그대로 유지됩니다.

마지막으로 출력 스타일을 선택합니다. 커밋할 읽기 가능한 파일에 대해 2 칸,4 칸 또는 탭 들여쓰기로 프리티 프린트하거나 저장 또는 전송을 위해 가장 작은 페이로드에 대해 단일 줄로 축소합니다. 정렬을 실행한 다음 결과를 복사하거나 다운로드합니다. 키 카운트는 얼마나 많은 키가 재정렬되었는지 알려 주며,이는 도구가 예상한 구조를 보았는지 빠르게 온전한 상태를 확인하는 것입니다.

오름차순, 내림차순, 재귀: 어떤 설정을 원하나요?

대부분의 경우 기본값은 원하는 것입니다: 오름차순,재귀, 대소문자를 구분하지 않고 두 개의 공백으로 꽤 인쇄됩니다. 그러면 처음에 정렬 동기를 부여하는 읽기 쉽고 diff 친화적 인 파일이 생성됩니다. 다른 설정은 특정 상황에 대해 존재하며 아래 표는 내가 결정하는 방법입니다.

설정 기본값 언제 바꿀 것인가
주문 오름차순(A~Z) 내림차순은 드뭅니다; 마지막 정렬을 위해 이름이 지정된 가장 최근 또는 가장 높은 우선 순위의 키를 상단에 원할 때 유용합니다
재귀적인 최상위 섹션의 순서를 변경하고 각 섹션 내부의 수동 조정 순서를 유지하려는 경우에만 끄십시오
케이스 무시 예를 들어 대소문자를 구분하여 정렬하는 다른 도구와 일치시키기 위해 엄격한 코드 포인트 순서가 필요할 때 끄십시오
배열 정렬 끄다 태그 목록이나 허용된 값과 같이 순서가 지정되지 않은 집합인 배열의 경우 켜십시오
예쁜 프린트 꺼서 운송 또는 보관을 위해 축소합니다

사람들이 오용하는 한 가지 설정은 배열 정렬입니다. 배열이 정렬되지 않은 집합을 나타내는 것이 확실할 때만 켜십시오. 태그 목록,허용된 파일 확장자 집합 또는 기능 플래그 가방은 정렬하기에 안전합니다. 파이프라인 단계 목록,경로 테이블 또는 위치가 시퀀스를 암시하는 모든 것이 확실하지 않은 경우 배열을 그대로 두십시오. tool's 기본값은 순서를 보존하는 것이 데이터를 손상시킬 수 없으며 잘못된 배열을 자동으로 정렬할 수 있기 때문입니다.

이것이 다른 JSON 도구와 어떻게 맞습니까?

정렬은 일반적으로 작은 체인의 한 단계입니다. JSON 이 API 에서 읽을 수 없는 축소된 상태로 도착하면,나는 그것을 통해 실행합니다 JSON 포맷터 먼저 들여쓰기하고 유효성을 검사한 다음 키를 정렬하여 스캔할 수 있도록 합니다. 정렬 후 전송할 페이로드를 준비할 때 JSON 미니피겨 이를 다시 한 줄로 제거하고 키가 이미 정렬되어 있기 때문에 동일한 데이터를 나타내는 두 개의 축소된 페이로드가 바이트당 동일하게 나오므로 캐싱 및 비교에 편리합니다.

프리젠테이션보다는 구조적 작업을 위해 JSON 플랫터너 중첩된 개체를 점선 키로 전환하고 다시 전환합니다. 이는 config를 환경 변수로 구성할 때 정렬과 자연스럽게 쌍을 이룹니다. 그리고 완전히 다른 형식의 데이터가 필요할 때 JSON 에서 YAML 변환기 다음 중지입니다; 변환하기 전에 키를 정렬하면 예측 가능하고 읽을 수 있는 필드 순서가 포함된 YAML 파일도 제공됩니다. 이러한 항목이 어떻게 조화를 이루는지 더 큰 그림을 원한다면 전체 설정을 배치했습니다 웹 개발자 툴킷 가이드그리고 포맷의 더 깊은 메커니즘이 살고 있습니다 JSON 포맷터 가이드.

실제 예: 패키지 길들이기.json diff

이 글을 시작하게 된 정확한 상황을 살펴보겠습니다. 왜냐하면 설정 선택이 왜 중요한지 보여주기 때문입니다. 나는 a 를 가지고 있었습니다 package.json 어디 dependencies block 은 설치 순서로 작성되었는데,대략 패키지가 2 년 동안 추가된 순서였다. 새로운 팀원이 그들의 editor's format-on-save 를 실행하여 의존성 키를 정렬하고,진정한 변경과 함께 커밋했다: 하나의 패키지를 버전 4 에서 버전 5 로 범핑하는 것.

diff 는 재앙이었습니다. 범프가 발생한 것 아래의 모든 종속성은 이동한 것처럼 보였습니다. 정렬이 위치를 이동했기 때문에 리뷰어는 한 줄 업그레이드인 것에 대해 30개의 변경된 줄을 보았습니다. 수정 사항은 누구의 편집기가 올바른지에 대해 논쟁하는 것이 아닙니다. 수정 사항은 파일을 한 번 정렬하고 해당 정렬을 "sort package.json keys,"와 같은 메시지와 함께 자체 별도 변경으로 커밋한 다음 현재 안정적인 순서 위에 버전 범프를 만드는 것이었습니다. 그 후 모든 향후 종속성 변경은 깨끗한 한 줄 또는 두 줄의 차이를 생성했습니다. 파일이 이미 everyone's 도구 순서에 포함되어 있었기 때문입니다.

이것이 버전 제어에 사용되는 모든 JSON에 대해 이제 따르는 패턴입니다. 전용 커밋에서 한 번 정렬 한 다음 정렬을 유지하십시오. The JSON 소터 기본값인 오름차순 및 재귀를 사용하면 Prettier's 정렬 옵션 및 순서가 정확히 생성됩니다 jq --sort-keys produce,그래서 팀원이 어떤 툴을 실행하더라도 파일은 안정적으로 유지됩니다. 제가 먼저 확인하는 한 가지는 배열입니다: package.json 걱정할 의미 있는 배열이 없지만 빌드 단계 목록과 같은 정렬된 배열이 있는 파일에는 기본값인 배열 정렬이 중단되어 시퀀스가 살아남습니다.

어떤 도구와 형식이 JSON 키를 정렬합니까?

JSON 키를 정렬하는 것은 생태계 전반에 걸쳐 나타날 정도로 일반적인 요구 사항이며,이는 연습이 개인적인 기발함보다는 건전하다는 좋은 신호입니다. 명령줄 프로세서 jq 가 있습니다 --sort-keys 깃발, 자주 쓴다 -S는,그것의 산출에 있는 각 목표의 열쇠를 분류합니다. Prettier 부호 체재자는 그것의 윤곽을 통해서 JSON 에 있는 열쇠를 분류할 수 있습니다. 많은 linters 는 소스 코드에 있는 분류되지 않은 목표를 깃발을 붙이는 정렬 키 규칙을 제안합니다. 언어 표준 도서관은 동일한 기능을,예를 들면 Python's 드러냅니다 json.dumps 다음을 수락합니다 sort_keys=True 표준적이고 정렬된 출력을 생성하는 인수입니다.

브라우저 기반 분류기가 추가하는 것은 빠르고 설정이 없는 경우입니다. API 응답,로그 라인 또는 Slack 메시지에서 JSON 의 블롭이 있고 지금 당장 정상적인 순서로 읽으려는 경우 페이지를 열고 붙여 넣는 것이 포맷터를 연결하거나 셸에 넣는 것보다 빠릅니다. 편집기 플러그인과 함께 붙여 넣기 및 이동 포맷터가 존재하는 것과 같은 이유입니다: 도구는 구성된 파이프 라인이 다루지 않는 임시 요구 사항을 충족합니다.

내 JSON 은 비공개인가요?

예. JSON 은 자바스크립트를 사용하여 브라우저에서 완전히 구문 분석,정렬 및 재시리얼화됩니다. 서버에 업로드되거나,로그되거나, 어디에나 저장되는 것은 없습니다. JSON 은 특히 JSON 에 대한 사소한 세부 사항은 아닙니다. 왜냐하면 JSON 은 비밀이 존재하는 곳이기 때문입니다: 토큰을 운반하는 API 응답,연결 문자열이 있는 구성 파일,고객 레코드가 포함된 페이로드 중 하나를 서버에 전달하는 도구에 붙여넣는 것은 실제 위험이며,이 도구가 피하기 위해 구축한 위험입니다.

당신은 내가 할 것과 같은 방식으로 주장을 확인할 수 있습니다. 귀하의 browser's 개발자 도구에서 네트워크 탭을 열고 당신이 정렬하는 동안 그것을 볼; 어떤 요청도 페이지를 떠나지 않습니다. 또는 인터넷에서 연결을 끊고 계속 정렬하십시오. 페이지가로드되면 도구가 전혀 연결되지 않고 작동하기 때문입니다. 클라이언트 측 처리는 내가 구축 한 모든 것에 대한 기본값이며,당신이 그것에 대한 더 넓은 주장에 관심이 있다면, 데이터 개인정보 보호 가이드 사건을 완전히 만듭니다.

자주 묻는 질문

JSON 키를 정렬한다는 것은 무엇을 의미합니까?

JSON 키를 정렬하면 어떤 값도 변경하지 않고 객체의 이름-값 쌍을 알파벳 순서로 재정렬합니다. 객체 {"name":"toolz","author":"Liton"} 는 {"author":"Liton","name":"toolz"} 가 됩니다. 키의 순서만 변경되므로 문서가 나타내는 데이터는 정확히 동일하게 유지됩니다.

정렬 키가 내 JSON의 의미를 변경합니까?

...이 아닌 . JSON 표준인 ECMA-404에서 객체는 순서가 지정되지 않은 이름-값 쌍 집합이므로 키를 재정렬해도 의미가 변경되지 않습니다. 모든 일치하는 파서는 정렬된 버전과 정렬되지 않은 버전을 동일한 데이터로 읽습니다. 주문은 사람의 가독성과 안정적인 차이를 생성하기 위한 것입니다.

중첩된 개체도 정렬됩니까?

예, 기본적으로. 재귀 정렬이 켜져 있으므로 문서 내의 모든 개체의 키가 중첩의 모든 수준에서 정렬됩니다. 재귀를 사용하여 최상위 키만 정렬하고 중첩된 객체를 원래 순서대로 그대로 둘 수 있습니다.

정렬기가 배열을 재정렬합니까?

기본적으로 아닙니다. 배열은 정의에 따라 정렬되며, 배열 순서를 변경하면 의미가 바뀔 수 있으므로 도구는 배열 순서를 유지합니다. 정렬을 원할 때 요소가 모두 문자열이거나 모든 숫자가 있는 배열을 정렬하는 옵션이 있으며, 유형을 혼합하거나 객체를 포함하는 배열은 항상 그대로 유지됩니다.

왜 JSON 키를 정렬해야 합니까?

가장 일반적인 이유는 안정적인 차이입니다. 모든 파일이 키를 동일한 알파벳 순서로 작성할 때 버전 제어 차이는 이동한 키가 아닌 변경된 값만 강조 표시됩니다. 또한 정렬을 통해 대규모 구성 파일과 API 응답을 눈으로 훨씬 쉽게 스캔하고 비교할 수 있습니다.

대소문자를 구분하지 않는 정렬은 어떻게 작동합니까?

대소문자 구분이 없는 정렬을 사용하면 키가 소문자처럼 비교되므로 이름, 이름 및 이름이 분리되지 않고 나란히 그룹화되어 소문자 순서로 소문자 순서로 정렬되기 때문에 키가 서로 비교됩니다. 문자 코드 포인트별로 엄격하게 정렬하려면 끕니다.

정렬된 JSON을 최소화할 수 있습니까?

네. 저장 또는 전송을 위한 가장 작은 형식인 추가 공백이 없는 단일 라인에서 정렬된 JSON을 얻으려면 축소된 출력을 선택하십시오. 읽을 수 있는 파일의 경우 대신 2-공백, 4공간 또는 탭 들여쓰기가 있는 예쁜 출력을 선택합니다.

내 json이 아무데나 업로드됩니까?

...이 아닌 . JSON은 브라우저에서 JavaScript에 의해 구문 분석되고 정렬되며 전송, 기록 또는 저장되지 않습니다. 정렬하는 동안 네트워크 탭을 보거나 오프라인으로 이동하여 도구가 연결 없이 계속 작동하여 이를 확인할 수 있습니다.


[Toolz.dev](/.의 빌더인 Liton이 작성하였습니다. 저는 브라우저 기반 개발자 도구를 구축하고 JSON, Laravel 및 웹 작업에 대해 작성합니다.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!