한국어

개발자 도구 · JSON 포맷터 및 유효성 검사기

JSON에 설명이 없는 이유: 설계 결정 및 해결 방법

· 배경

JSON 표준 검증

JSON에 설명이 없는 이유: JSON 토큰과 정확한 검증 경계로 설명된 설계 결정 및 해결 방법
원본 ToolAcre 벡터 일러스트레이션

댓글이 의도적으로 JSON에서 삭제되었습니다. 이 게시물에서는 이유, 다시 추가하려는 모든 시도가 새로운 형식을 생성하는 이유, 구성 파일에 실제로 메모가 필요할 때 선택할 수 있는 옵션에 대해 설명합니다.

빌드를 중단시킨 주석

빌드를 중단시킨 주석 — JSON 구성에 추가된 유용한 메모와 첫 번째 슬래시에서 중지된 파서입니다. 작성자는 JavaScript 또는 JSONC 인식 편집기에서 패턴을 복사했을 수 있지만 배포 도구는 엄격한 JSON을 사용합니다. 구문 강조를 사용하면 소비자가 첫 번째 주석 표시를 거부하더라도 메모가 합법적인 것처럼 보일 수 있습니다.

슬래시는 스캐너가 값이나 멤버를 기대하는 JSON 토큰이 아니기 때문에 주석이 거부됩니다. ToolAcre는 JSONC 또는 JSON5 구문을 자동으로 제거하지 않습니다. 기존의 주석 모양 속성은 일반 데이터이며 엄격한 JSON 구문이 이를 허용하더라도 애플리케이션 스키마를 위반할 수 있습니다. JSON의 설계에 대한 뒷받침되지 않는 역사적 주장은 검증에 사용할 수 있는 기본 증거나 추적 가능한 표준 소스 없이 확립된 사실로 제시되기보다는 생략되거나 수정됩니다.

Crockford가 댓글을 삭제한 이유

Crockford가 주석을 제거한 이유 - 이후 설명에 따르면 주석은 구문 분석 지시어를 전달하는 데 사용되어 구현 간의 상호 운용성을 약화시켰습니다. 관련 설계 결과는 표준 JSON에 주석 토큰이 없다는 것입니다. 개인적인 동기, 정확한 연대기 또는 보편적인 업계 반응에 대한 주장에는 이 저장소에서 제공하지 않는 역사적 출처가 필요합니다.

따라서 여기서는 뒷받침되지 않는 역사적 주장을 생략하거나 수정합니다. 관찰 가능한 표준과 파서 동작이면 충분합니다. 엄격한 JSON는 주석 채널 없이 6가지 값 유형과 2개의 컨테이너를 통해 데이터를 교환합니다. 이러한 제약으로 인해 한 수신자가 다른 수신자가 무시하는 텍스트에 작동 의미를 할당하는 것을 방지할 수 있지만, 수동으로 유지 관리되는 구성에 JSON이 덜 불편해집니다.

유효성 검사기가 댓글에 대해 보고하는 내용

유효성 검사기가 댓글에 대해 보고하는 내용 — `//` 및 `/* */`은 문법에 없으므로 오류는 줄과 열이 있는 첫 번째 슬래시에 표시됩니다. 스캐너는 메모의 단어에 반대하지 않습니다. 해당 위치에서 유효한 JSON 값, 멤버 이름 또는 구분 기호를 `/`으로 시작할 수 없습니다.

`{"port":8080, // local only "secure":false}`의 경우 쉼표는 유효하며 다음 유효한 토큰은 따옴표로 묶인 속성 이름 또는 닫는 중괄호여야 합니다. 슬래시는 그 기대를 위반합니다. 메모만 제거하면 유효한 구분 기호와 다음 구성원이 남습니다. 근처의 구두점을 삭제하면 두 번째 오류가 발생할 수 있습니다. 편집할 때마다 정확한 엄격한 출력을 재검증합니다.

댓글을 다시 추가한 형식

주석을 다시 추가한 형식 - JSONC는 익숙한 JSON 구문에 대한 주석을 허용하는 반면 JSON5는 따옴표가 없는 식별자 키 및 후행 쉼표와 같은 편의를 추가합니다. Hjson은 추가적인 완화된 구문으로 인간 편집을 강조합니다. YAML에는 주석을 포함한 자체 문법이 있으며 주석이 추가된 단순한 JSON이 아닙니다.

수락은 소비자마다 다릅니다. 편집기 설정 및 TypeScript 구성은 주석 허용 파서를 사용할 수 있는 반면, 패키지 매니페스트 또는 API 본문에는 엄격한 JSON이 필요할 수 있습니다. Kubernetes는 일반적으로 도구에 따라 YAML 또는 JSON를 사용합니다. 문서화 및 파일 처리에서 실제 형식의 이름을 지정하십시오. 확장 기능을 제거하거나 모든 개체 표기법 "JSON"을 호출하면 호환성 경계가 숨겨집니다.

엄격한 JSON 내부의 해결 방법

엄격한 JSON 내부의 해결 방법 — 기존 `_comment` 또는 `//` 키는 설명을 일반 문자열 멤버로 저장합니다. 키와 값 모두 표준 토큰을 사용하기 때문에 엄격한 구문 분석을 통과합니다. 중복된 구성원 이름은 신뢰할 수 없고 파서에 의해 축소될 수 있으므로 여러 노트에는 고유 키나 배열이 필요합니다.

해결 방법은 데이터 모델을 변경합니다. `additionalProperties: false`이 있는 스키마는 주석을 거부할 수 있으며 애플리케이션은 이를 실제 구성으로 유지하거나 전송할 수 있습니다. 외부 문서, 인접한 README 또는 스키마 `description`이 더 안전한 설명 채널을 제공하는 경우가 많습니다. 모든 소비자가 명시적으로 허용하고 무시하는 경우에만 주석 모양 멤버를 사용하십시오.

작업 예: 주석이 달린 설정 파일

작업 예: 주석이 달린 설정 파일 — `"timeout":30` 위에 `// seconds before retry`을 포함하는 JSONC 소스로 시작합니다. 대상이 JSON만 허용하는 경우 JSONC를 이해하는 파서를 사용하여 데이터를 생성한 다음 해당 데이터를 엄격한 JSON로 직렬화합니다. 배포된 아티팩트는 `{"timeout":30}`가 되고 유지 관리 소스는 해당 설명을 유지합니다.

정규 표현식이 포함된 주석을 제거하지 마세요. 슬래시 시퀀스는 URL과 같은 문자열 내부에 합법적으로 나타날 수 있으며 블록 주석 패턴은 텍스트 대체가 잘못 처리되는 방식으로 줄에 걸쳐 있을 수 있습니다. 소스와 생성된 아티팩트를 구별되게 유지하고, 엄격한 결과를 검증하고, 빌드에서 재생성을 정렬합니다. 이는 수신 파서가 이를 지원하는 것처럼 가장하지 않고 작성자 메모를 보존합니다.

여기서 다루지 않는 내용

여기서 다루지 않는 내용 — 도구별로 다르며 자주 변경되는 주석을 허용하도록 개별 파서를 구성하는 방법입니다. 한 라이브러리의 허용 옵션은 JSON 문법을 변경하거나 다른 서비스가 동일한 텍스트를 허용하도록 보장하지 않습니다. 편집기의 표시에 의존하기보다는 파서, 버전 및 대상을 확인하십시오.

이 문서는 또한 댓글이 삭제된 정확한 시기, 누가 각 해결 방법을 먼저 채택했는지 또는 하나의 디자인 결정만으로 JSON의 인기를 얻었는지 여부에 대한 근거 없는 주장을 방지합니다. 그러한 역사적 주장에는 독립적인 1차 출처가 필요합니다. 여기서는 생략되거나 수정되었습니다. 지원되는 결론은 현재의 엄격한 구문, 저장소 동작 및 명명된 형식 간의 운영상의 차이점으로 제한됩니다.

요약: JSON는 구성 언어가 아닌 데이터 교환 형식입니다.

요약: JSON은 주석이 많은 구성 언어가 아닌 데이터 교환 형식입니다. 유효성 검사기는 메모가 엄격한 문법을 위반하는 위치를 정확하게 보여줍니다. 사람에게 주석이 필요한 경우 소비 도구가 공식적으로 지원하는 형식을 선택하거나 별도의 엄격한 아티팩트를 생성하는 주석이 달린 소스를 유지합니다. 댓글이 무해하게 무시될 것이라고 가정하지 마십시오.

엄격한 JSON이 필수인 경우 설명을 문서로 옮기거나 스키마 승인 메타데이터를 사용한 다음 최종 문서의 유효성을 검사합니다. ToolAcre는 자료를 자동으로 삭제하는 대신 의도적으로 첫 번째 슬래시를 보고합니다. 자동 변환은 문자열을 변경하거나 형식 불일치를 숨길 수 있기 때문입니다. 역사적 맥락은 동일하게 유지되어야 합니다. 지원되지 않는 주장은 생략되거나 수정되고, 관찰 가능한 구문과 파서 동작은 결론을 전달합니다.