# JSON5 - 인간을 위한 JSON

> Clean Markdown view of GeekNews topic #18171. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18171](https://news.hada.io/topic?id=18171)
- GeekNews Markdown: [https://news.hada.io/topic/18171.md](https://news.hada.io/topic/18171.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-12-09T17:34:39+09:00
- Updated: 2024-12-09T17:34:39+09:00
- Original source: [json5.org](https://json5.org/)
- Points: 9
- Comments: 2

## Summary

JSON5는 JSON 형식을 확장하여 사람이 작성하고 유지보수하기 쉽게 만든 형식으로, 주요 프로젝트와 Apple 플랫폼에서 널리 채택되고 있습니다. JSON5는 ECMAScript 5.1의 일부 구문을 포함하여 객체 키, 배열, 문자열, 숫자, 주석, 공백 등 다양한 기능을 확장하였으며, ES5와의 호환성을 유지하면서도 ES2019와 완전히 호환됩니다. JSON5는 MIT 라이선스로 제공되며, JSON5 문자열을 파싱하거나 JavaScript 값을 JSON5 문자열로 변환하는 API와 CLI를 제공합니다.

## Topic Body

- 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 라이선스 하에 제공됨.

## Comments



### Comment 32186

- Author: xguru
- Created: 2024-12-10T09:06:57+09:00
- Points: 2

[JSON5를 만들면서 배운 것 : 혐오자들을 무시하세요](https://news.hada.io/topic?id=7156)

### Comment 32178

- Author: neo
- Created: 2024-12-09T17:34:41+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42360681) 
- 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 유형을 제외한 다른 기능은 필요하지 않다고 생각함
  - 후행 쉼표는 유용하다고 봄
