9P by neo 12일전 | favorite | 댓글 2개
  • 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 유형을 제외한 다른 기능은 필요하지 않다고 생각함
    • 후행 쉼표는 유용하다고 봄