여섯 값, 예외 없음
JSON 은 정확히 여섯 값 타입: string, number, boolean, null, object, array. 그게 전체 어휘. 모든 JSON 문서가 — 아무리 깊이 중첩됐든 — 이 여섯에서 만들어져.
JSON 에 없는 것
undefined없음 — JavaScript 엔 있지만 JSON 엔 없음. 누락 값엔null쓰거나 키 자체 생략.- 함수 없음 — JSON 은 데이터, 코드 아님.
- 주석 없음 — Crockford 가 의도적으로 제거. 별도 문서 파일이나 layered 포맷 (JSON5, JSONC) 써.
- 네이티브 날짜 없음 — 날짜는 문자열, 관행으로 ISO 8601 (
2026-05-04T01:30:11Z). - BigInt 없음 — 숫자는 IEEE 754 float. 253 위로는 정수 정밀도가 조용히 손실.
- regex, Map, Set 없음 — JS 전용 타입은 plain object/array 로 직렬화.
함의: JSON 은 어떤 언어의 완벽한 거울도 아니다
모든 언어가 자기 네이티브 타입을 JSON 의 6 타입에 매핑 해야 해. Python tuple 은 array. JavaScript undefined 는 null 또는 부재. 날짜는 ISO 문자열. 라운드트립엔 그냥 JSON.stringify 가 아니라 관행이 필요해.
'JSON 은 날짜가 있다' 거짓말: ECMAScript 의
JSON.stringify 가 Date 에서 ISO 문자열 만들고; 같은 문자열을 JSON.parse 하면 Date 가 아니라 string. 라운드트립 실패. 진짜 날짜 필요하면 reviver 함수나 schema validation 써.