GN⁺: JSON5 - 인간을 위한 JSON
(json5.org)- JSON5는 JSON 파일 형식을 확장하여 사람이 직접 작성하고 유지보수하기 쉽게 만든 형식
- 기계 간 통신을 위한 용도로는 사용되지 않음
- 2012년에 시작되어 2022년 기준으로 주당 6500만 회 이상 다운로드되며, npm에서 가장 많이 의존하는 패키지 상위 0.1%에 속함
- Chromium, Next.js, Babel, Retool, WebStorm 등 주요 프로젝트에서 채택됨
- MacOS와 iOS 같은 Apple 플랫폼에서 기본적으로 지원됨.
-
JSON5의 특징
- JSON의 상위 집합으로, ECMAScript 5.1의 일부 구문을 포함함.
- JSON5 파일은 항상 유효한 ES5 파일임.
-
확장된 ECMAScript 5.1 기능
-
객체
- 객체 키는 ECMAScript 5.1 IdentifierName이 될 수 있음.
- 객체에 단일 후행 쉼표를 허용함.
-
배열
- 배열에 단일 후행 쉼표를 허용함.
-
문자열
- 문자열은 단일 인용부호로 감쌀 수 있음.
- 줄바꿈 문자를 이스케이프하여 여러 줄에 걸쳐 있을 수 있음.
- 문자 이스케이프를 포함할 수 있음.
-
숫자
- 16진수로 표현 가능함.
- 선행 또는 후행 소수점을 가질 수 있음.
- IEEE 754 양의 무한대, 음의 무한대, NaN을 포함할 수 있음.
- 명시적 플러스 기호로 시작할 수 있음.
-
주석
- 단일 및 다중 라인 주석을 허용함.
-
공백
- 추가적인 공백 문자를 허용함.
-
객체
-
API
-
JSON5.parse()
: JSON5 문자열을 파싱하여 JavaScript 값이나 객체를 생성함. -
JSON5.stringify()
: JavaScript 값을 JSON5 문자열로 변환함.
-
-
CLI
- JSON5를 JSON으로 변환하거나 JSON5 문서의 구문을 검증하는 CLI 제공.
-
ECMAScript 호환성
- JSON5는 ES5와 완전히 호환되도록 설계되었으나, U+2028 및 U+2029 문자는 ES5에서 허용되지 않음.
- ES2019에서 이 문자가 허용되어 JSON 및 JSON5가 ES2019와 완전히 호환됨.
-
라이선스
- MIT 라이선스 하에 제공됨.
Hacker News 의견
- JSON은 이중 인용부호 문자열만 지원하여 인용부호 사용에 대한 논쟁을 제거하는 특징이 있음. JSONC를 사용하여 주석과 후행 쉼표를 추가할 수 있음
- JSONC는 Visual Studio Code에서 설정 형식으로 사용됨
- JSON5의 명칭이 비윤리적이라고 생각함. 원작자의 승인이 없는 경우 다음 버전인 것처럼 암시하는 것은 부적절함
- JSON5를 선호하며, YAML의 가독성이 떨어진다고 생각함. YAML 파일을 이해하기 위해 JSON 변환 도구를 자주 사용함
- JSON이 간단하기 때문에 널리 사용됨. XML이나 YML 같은 복잡한 대체물은 적합하지 않다고 생각함
- 복잡한 형식을 사용하면 문제가 발생할 수 있음
- EDN이 Clojure 생태계 외부에서 많이 채택되지 않은 점이 아쉬움
- 표준이 없지만 사용자들은 문제없이 사용 중임
- JSON의 특수 문자 문제를 지적함. JSON은 UTF-8로 정의되어 있지만, 7비트 ASCII 제어 문자를 잘못 기재한 오류가 있음
- RFC에서 33개의 제어 문자를 포함해야 함
- TOML을 추천하며, 인간 가독성과 도구 지원의 완벽한 조합이라고 생각함
- JSON/YAML 대안에서 더 많은 유형을 지원하는 것은 좋은 생각이 아니라고 봄
- NestedText가 거의 이상적이지만, 여러 구문을 사용하고 주석을 데이터 모델에 포함하지 않음
- JSON5가 BMP 외부의 유니코드 문자를 위한 \U 이스케이프 시퀀스를 도입하지 않은 점을 지적함
- UTF-16 대리쌍을 사용해야 하는 것은 번거롭고 유니코드 표준에 맞지 않음
- JSON에서 주석과 네이티브 datetime 유형을 제외한 다른 기능은 필요하지 않다고 생각함
- 후행 쉼표는 유용하다고 봄