JSON 을 처음 축소하는 것이 실제로 나에게 중요했던 것은 웹 사이트가 아니 었습니다 - 마이크로 컨트롤러에있었습니다. 몇 킬로바이트의 메모리를 남겨두고 장치에 구성 블록을 배송하고 있었고 손으로 편집 한 예쁜 인쇄 버전은 공백이 제거 된 동일한 데이터의 거의 두 배 크기였습니다. 동일한 키,동일한 값,동일한 구조 - 유일한 차이점은 순전히 인간이 읽을 수 있도록 존재하는 수천 개의 공간과 개행이었습니다. 그것들을 벗겨 내고 페이로드 적합성을 제거하십시오. 그것이 축소 뒤에있는 전체 트릭이며 칩에 압착 된 구성 파일과 마찬가지로 하루에 백만 번 제공되는 API 응답에 적용됩니다.
이 가이드는 무료를 중심으로 구축된 JSON을 축소하는 방법과 이유에 대한 철저한 버전입니다 JSON 미니파이어 도구. 나는 minification 이 제거 하는 것과 고의적으로 혼자 남겨 두는 것,작은 JSON 이 더 빠른 이유,minifying 이 서식 지정 및 이스케이프에서 어떻게 다른지,그리고 조심스러운 minifier 와 부주의 한 것을 분리하는 하나의 미묘한 속성 - 숫자 정밀도와 같은 가족의 일부입니다 JSON 포맷터 나는 반대 작업에 사용하며, 그것은 내가 배치한 툴킷에 속합니다 JSON 도구에 대한 궁극적 인 가이드.
TL;DR: JSON 을 축소하면 토큰 사이에 있는 모든 공백,탭, 개행 문자를 제거하여 정확히 동일한 데이터로 구문 분석하는 가장 작은 텍스트를 생성합니다. 키,값 또는 순서에 대한 변경 사항은 없습니다. 공백만 이동합니다. The JSON 미니파이어 입력의 유효성을 먼저 검사하고 잘못된 형식인 경우 parser's 정확한 오류를 보고하고 문자열 리터럴 외부에서만 공백을 제거하여 값 내부의 텍스트가 그대로 유지되도록 하고 바이트에 대한 숫자 토큰 바이트를 보존하므로 1.0 과 같은 값은 1.0 을 유지합니다. beautify 모드는 2 칸, 4 칸 또는 탭으로 프로세스를 반전시킵니다. 모든 것이 브라우저에서 실행됩니다.
JSON을 축소하는 것은 실제로 무엇을 하는가?
JSON 문서는 중괄호, 괄호, 콜론, 쉼표, 문자열, 숫자 및 리터럴 등 일련의 토큰입니다 true, false, 그리고 null. 그 토큰들 사이에서 JSON 문법은 어떤 양의 공백도 허용하고,예쁘게 인쇄된 JSON 은 그 허용치를 아낌없이 사용합니다: 모든 쉼표 뒤에 개행,중첩 수준당 두 개 또는 네 개의 들여쓰기 공간,모든 콜론 뒤에 공백이 있습니다. 그 공백은 모두 인간의 눈을 위해 파서가 완전히 무시합니다.
축소하는 것은 그 하찮은 공백 문자를 모두 제거하고 토큰 자체와 문법에 필요한 최소 구두점만 남기는 행위입니다. 들여쓰기된 40개의 줄로 읽는 구성은 조밀한 줄 하나로 축소됩니다. 결정적으로, 데이터 동일하다 - 축소된 버전과 예쁜 버전을 구문 분석하면 동일한 키와 동일한 순서, 동일한 값을 사용하여 정확히 동일한 개체를 얻을 수 있습니다. 축소는 표현을 변경하고 결코 의미를 변경하지 않습니다. 이 모든 것이 기반으로 하는 문법은 다음과 같이 게시됩니다 RFC 8259이는 중요하지 않은 공백으로 간주되는 것과 그렇지 않은 것에 대한 권한입니다.
한 자리 공백은 아닙니다 하찮은 것은 문자열 안에 있습니다. the spaces in "hello world" 는 값의 일부이며 손대지 않은 채 축소된 채로 살아남아야 한다. 따라서 올바른 축소자는 단순히 텍스트의 모든 공백을 삭제할 수 없다; 문자열 리터럴 안에 있는지 추적하고 그 내용을 그대로 두어야 한다. 그만큼 JSON 미니파이어 문자별로 텍스트 문자를 걷고 토큰 사이에 있는 공백만 삭제하여 값 중 하나 내부에 고의적인 공간이 손실되지 않도록 하는 것이 정확히 수행됩니다.
왜 JSON을 축소하는 것이 전혀 귀찮습니까?
헤드라인 이유는 크기이며,크기는 웹상의 속도와 비용으로 직접 변환됩니다. JSON 응답의 모든 바이트는 네트워크를 통해 이동해야 하며,수천 또는 수백만 번 요청된 페이로드의 경우 공백이 실제 대역폭에 추가됩니다. 들여쓰기와 줄 바꿈은 일반적으로 예쁘게 인쇄된 문서의 5분의 1~3분의 1을 차지하므로 축소하면 모든 전송에서 의미 있는 부분을 줄일 수 있습니다. 특히 느린 모바일 연결에서는 응답이 더 빨리 도착하고,출구 비용을 지불할 때 서비스 비용이 더 저렴합니다. 이것이 사실상 모든 프로덕션 API 가 축소된 JSON 을 반환하고 데이터를 웹 앱에 번들로 묶는 모든 빌드 도구가 먼저 축소되는 이유입니다.
더 작지만 구문 분석 이점도 있습니다. 공백 실행을 건너뛸 필요가 없는 구문 분석기는 해야 할 일이 약간 적기 때문에 핫 루프에서 처리되는 매우 큰 문서의 여백에 중요합니다. 그리고 처음에 저를 여기까지 데려온 저장 각도가 있습니다: JSON 을 제한된 공간에 맞추면 - 크기 제한이 있는 쿠키,임베디드 장치,캡이 있는 데이터베이스 열,URL 쿼리 매개변수 - 축소된 형식이 적합하게 만듭니다. 도구의 크기 절약 배지는 이전과 이후를 바이트와 백분율 감소로 표시하므로 주어진 문서가 축소할 가치가 있는지 또는 이미 희박했는지 즉시 확인할 수 있습니다.
축소하는 것이 하는 일 아닙니다 당신을 사는 것은 헤비급 의미에서 비밀 또는 압축입니다. 축소 된 JSON 은 여전히 일반 텍스트이며 여전히 구문 분석하는 모든 것에 완벽하게 읽을 수 있습니다; 공백을 제거하는 것은 암호화되지 않고 gzip 이 아닙니다. 전선에서 JSON 은 일반적으로 축소 위에 gzip 압축되어 있으며 두 가지는 보완적입니다 - 축소는 문법이 허용하는 중복성을 제거하고 gzip 은 바이트 스트림에서 중복성을 숨기고 있다고 생각하기 때문이 아니라 위의 이유로 축소합니다.
축소하는 것은 포맷, 이스케이프, 압축하는 것과 어떻게 다른가요?
이 네 가지 연산은 끊임없이 혼란스러워지며,똑바로 유지하면 잘못된 도구에 도달하지 않습니다. 서로 다른 것에 작용하고 서로 다른 문제를 해결합니다.
축소 문서를 유효하게 유지하면서 문서를 작게 만들기 위해 중요하지 않은 공백을 제거합니다. JSON. 포맷팅또는 beautifying 은 그 반대를 수행합니다: 문서를 읽을 수 있도록 들여쓰기와 줄 바꿈을 추가합니다. 이는 API 응답을 디버깅하거나 손으로 구성을 편집할 때 원하는 것입니다. The JSON 미니파이어 두 가지 모두 동일한 축의 두 방향이기 때문에 기계에 대해서는 축소하고 사람에 대해서는 아름답게 만듭니다. 탈출 는 완전히 다른 축입니다: 그것은 배치하기에 안전한 텍스트 덩어리를 만듭니다 내부 따옴표와 제어 문자를 백슬래시 시퀀스로 변환하는 JSON 문자열입니다 JSON 탈출 / 이탈 도구. 그리고 압축 gzip과 마찬가지로 JSON 계층 아래의 원시 바이트에서 작동하므로 최소화가 완료된 후 전송이 더욱 줄어듭니다.
표에는 각각에 적합한 도구의 차이점과 점이 나와 있습니다.
| 운영 | 변경되는 것 | 결과 여전히 JSON? | 도구 |
|---|---|---|---|
| 축소하다 | 토큰 사이의 공백을 제거합니다 | 네, 같은 데이터입니다 | JSON 미니파이어 |
| 아름답게 / 형식 | 들여쓰기 및 줄 바꿈을 추가합니다 | 네, 같은 데이터입니다 | JSON 포맷터 |
| 탈출 | JSON 문자열 안에 텍스트를 넣도록 인코딩합니다 | 문자열 값이 됩니다 | JSON 탈출 / 이탈 |
| Css 축소 | 스타일시트에서 공백을 제거합니다 | JSON 이 아니라 CSS 입니다 | CSS 미니파이어 |
| HTML을 축소합니다 | 마크업에서 공백을 제거합니다 | JSON 이 아니라 HTML 입니다 | HTML 미니파이어 |
동일한 배송용 축소 아이디어가 형식에 따라 실행되는 이유입니다 CSS 미니파이어 그리고 HTML 미니파이어 이 바로 옆에 앉으십시오. 전체 빌드는 동일한 대역폭 이유로 JSON 데이터, 스타일시트 및 마크업을 최소화합니다.
JSON을 축소하면 데이터가 변경됩니까?
정답은 minifying이 그래야 한다는 것입니다 결코 데이터를 바꾸면 좋은 도구가 이를 보장합니다. 하지만 신중한 축소기와 순진한 축소기를 구분하는 미묘함이 있으며,이것이 여러분을 물 수 있기 때문에 이해할 가치가 있습니다.
많은 축소기는 JSON을 메모리 내 개체로 구문 분석한 다음 공백 없이 다시 직렬화하는 방식으로 작동합니다. 왕복 여행은 편리하지만 모든 값이 도중에 language's 숫자 유형을 통과한다는 의미이며 숫자가 어떻게 되는지 다시 작성할 수 있습니다 작성 수학값은 변하지 않았는데도 말이죠. 라고 쓴 값 1.0 로 돌아옵니다 1. 같은 값 1e3 로 돌아옵니다 1000. language's 숫자 유형보다 더 많은 숫자를 가진 정수는 정확하게 유지할 수 있습니다. 약 16개의 유효 숫자를 초과하는 모든 항목은 미묘하게 변경되어 돌아올 수 있습니다. 대부분의 문서에서는 이 중 어느 것도 중요하지 않지만 JSON이 버전 문자열, 데이터베이스 식별자 또는 고정 정밀도 소수를 숫자로 전달하는 경우 재분석 및 재조정 축소기는 조용히 손상시킬 수 있습니다.
X-1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 10 JSON 미니파이어 다르게 축소하여 함정을 피합니다. 여전히 검증하다 구문 분석을 통해 입력을 수행하므로 잘못된 형식의 JSON이 포착되어 보고됩니다. 그러나 출력을 생성하려면 구문 분석된 개체를 다시 직렬화하는 대신 원본 텍스트에서 공백을 직접 제거합니다. 즉, 모든 숫자 토큰은 작성한 대로 정확하게 보존됩니다. 후행 0 1.0 스테이 1.0; 30자리 정수는 30자리 숫자를 모두 유지합니다. 숫자가 다시 작성될 위험 없이 축소 크기를 얻을 수 있습니다. 최고의 유효성 검사 및 바이트별 충실도입니다. 전송보다는 가독성에 관한 beautify 방향은 표준 재직렬화를 통해 서식을 정규화합니다. 이는 사람이 읽을 수 있도록 다시 포맷할 때 예상되는 동작입니다.
JSON이 축소되지 않을 때 오류를 어떻게 읽습니까?
이 도구는 축소하기 전에 유효성을 검사합니다. 즉,잘못된 형식의 문서가 깨진 출력이 아닌 오류를 생성한다는 의미입니다. 그리고 그 오류는 장애물이 아닌 기능입니다. JSON 에 실제 문제가 있음을 알려줍니다 전에 당신은 그것을 덜 도움이 되는 곳으로 거부할 수 있는 곳으로 배송합니다.
메시지는 JavaScript JSON 파서에서 직접 나오며 일반적으로 위치 이름을 지정합니다. 가장 일반적인 원인은 배열이나 개체의 마지막 요소 뒤에 오는 후행 쉼표입니다. 엄격한 JSON은 이를 금지합니다; JSON은 JavaScript 개체 리터럴과 달리 인용된 키를 요구하므로 큰따옴표로 묶이지 않는 키; 이중 따옴표 대신 작은 따옴표를 사용하는 문자열; 그리고 무언가가 열리고 닫히지 않은 불균형 대괄호 또는 중괄호입니다. 이들 각각은 어디를 봐야 할지 알게 되면 작은 수정 사항이며 보고된 위치는 이웃을 가리킵니다. 소스가 실제로 JSONC인 경우 - 일부 구성 파일에서 사용되는 주석과 후행 쉼표가 있는 JSON - 표준 JSON이 아닌 확장자이기 때문에 있는 그대로 축소하지 않습니다.; 먼저 주석과 후행 쉼표를 제거하거나 엄격한 JSON으로 변환하면 유효성이 검사됩니다.
구조가 유효하지만 볼 수 없는 경우 왜 두 문서는 다르게 작동하고, 둘 다 아름답게 하고 비교하거나, 실행합니다 JSON 차이점 정확히 어떤 키나 값이 다른지 볼 수 있는 도구. JSON 을 디버깅하는 것은 예쁜 형태로 훨씬 쉬우며,이는 제가 에서 만든 일상적인 경우입니다 JSON 포맷터 가이드. 그리고 이 모든 유효성 검사와 축소는 업로드된 것이 없이 브라우저에서 발생하기 때문에 API 키, 토큰 또는 고객 기록이 포함된 페이로드를 안전하게 붙여넣을 수 있습니다. 이는 제가 전체 내용을 설명한 개인 정보 보호 인수입니다 온라인 도구에 대한 데이터 개인 정보 보호 가이드.
실제 예: 읽기 가능한 구성에서 배송된 페이로드까지
여기 그 자리를 적립 도구를 보여주는 왕복 여행입니다. 당신이 손으로 서비스 구성을 편집 한 적이 있다고 가정,그래서 가독성을 위해 꽤 인쇄 - 자신의 라인에 개체 키,두 공간 들여 쓰기,스캔하기 쉬운 빈 구조 길이 제한이 환경 변수에 들어가기 전에,당신은 가능한 한 작은 그것을 원한다.
구성을 붙여넣습니다 JSON 미니파이어,minify 를 누르고,단 하나 선으로 붕괴한다. 크기 기장은 340 까지 512 바이트 같이 무언가를,변수's 한계를 적합하하고 아닙니다의 다름인 3 분의 1 의 감소 읽을지도 모른다. 너의 환경 파일로 minified 선을 똑바로 베끼십시요. 너가 쓴 시간 초과를 주의하십시요 1.5 은 여전히 1.5 그리고 재시도 횟수 3 은 여전히 3 - 숫자는 그대로 유지되며, 긴 숫자 식별자가 있으면 도구에서 값을 다시 표시하지 않고 공백을 제거했기 때문에 그대로 유지됩니다.
몇 주 후 버그 보고서를 통해 로그에 있는 동일한 축소된 얼룩을 쳐다볼 수 있으며 하나의 조밀한 선으로 읽을 수 없습니다. 도구에 다시 붙여넣고,아름다움을 클릭하고,두 개의 공백을 선택하면 실제로 스캔할 수 있는 들여쓰기된 형태로 확장됩니다. 값을 수정하고,다시 축소하고,다시 배송합니다. 양방향 흐름 - 읽고 편집하기 위해 아름답게,저장하고 보내기 위해 축소 -이 일일 리듬이며,크기 판독 및 정확한 오류 보고가 있는 두 가지를 한 곳에 두는 것이 빠른 이유입니다. 더 넓은 빌드 앤 배송 유틸리티 세트의 경우 이 중 하나입니다 웹 개발자 툴킷 나머지는 반올림합니다.
자주 묻는 질문
온라인에서 JSON 을 어떻게 축소합니까? JSON 을 입력 영역에 붙여넣고 Minify 를 클릭합니다. 이 도구는 문자열 값 외부의 모든 공백을 제거하고 크기 절감과 함께 압축된 결과를 보여줍니다. 모든 것이 브라우저에서 실행되므로 아무 것도 업로드되지 않습니다.
JSON을 축소하면 데이터가 변경됩니까? 아니요. 축소하면 토큰 사이의 공백만 제거되므로 키,값 및 순서가 동일하게 유지됩니다. 축소된 문서는 원래 예쁘게 인쇄된 것과 정확히 동일한 개체 또는 배열로 구문 분석됩니다.
왜 JSON을 전혀 축소합니까? Minified JSON 은 크기가 작기 때문에 네트워크를 통해 더 빠르게 전송하고 대역폭을 덜 사용하며 약간 더 빠르게 구문 분석합니다. API 응답,구성 파일 및 웹 앱에 번들로 제공되는 데이터는 일반적으로 이러한 이유로 프로덕션에서 축소됩니다.
이 도구는 1.0 또는 큰 정수와 같은 숫자 서식을 유지합니까? 예. 값을 다시 쓰는 대신 공백을 제거하기 때문에 숫자 토큰은 작성한 그대로 유지됩니다. 1.0 과 같은 값은 1.0 을 유지하고 매우 큰 정수는 구문 분석 및 재 문자열화 축소자가 다시 작성할 모든 숫자를 유지합니다.
JSON 을 축소하고 아름답게 하는 것의 차이점은 무엇입니까? Minifying 은 공백을 제거하여 JSON 을 기계에 가능한 한 작게 만들고,beautifying 은 들여쓰기와 줄 바꿈을 추가하여 사람들이 읽을 수 있도록 합니다. 이 도구는 두 가지 모두를 수행합니다: 배송을 위해 minify,편집 및 디버깅을 위해 beautify.
주석이나 후행 쉼표로 JSON을 축소할 수 있나요? 아니요. 표준 JSON 은 주석이나 후행 쉼표를 허용하지 않으므로 도구는 유효성 검사 중에 이를 오류로 보고합니다. 주석과 후행 쉼표를 먼저 제거하거나 JSONC 를 엄격한 JSON 으로 변환한 다음 축소하십시오.
여기서 민감한 JSON을 축소하는 것이 안전합니까? 예. 모든 처리는 브라우저 내부의 JavaScript 에서 이루어 지므로 JSON 이 어떤 서버로도 전송되지 않으며 아무것도 기록되지 않으며 도구가 연결이 비활성화 된 상태에서 작동합니다. API 키 또는 개인 데이터가 포함 된 페이로드를 안전하게 축소 할 수 있습니다.
왜 내 JSON이 축소하는 대신 오류를 표시합니까? 도구는 축소하기 전에 입력의 유효성을 검사하므로 오류는 JSON 이 잘못된 형식임을 의미하며,일반적으로 누락되거나 추가 쉼표,인용되지 않은 키,인용되지 않은 문자열 또는 불균형 괄호로 수정될 수 있도록 메시지에 문제의 위치가 포함됩니다.
이 가이드는 무료와 함께 제공됩니다 JSON 미니파이어 Toolz.dev의 도구 - 가입 없음, 업로드 없음, 오프라인으로 작동.



