여섯 값, 예외 없음
JSON 의 값 타입은 여섯 개야. string, number, boolean, null, object, array. 어휘가 이게 전부야. 아무리 깊이 중첩된 JSON 문서라도 결국 이 여섯 개를 쌓아 만든 거야.
JSON 에 없는 것
undefined가 없어 — JavaScript 엔 있지만 JSON 엔 없어. 값이 비었으면null을 쓰거나 키를 아예 빼.- 함수가 없어 — JSON 은 데이터지 코드가 아니야.
- 주석이 없어 — Crockford 가 일부러 뺐어. 설명은 문서 파일에 따로 적거나 JSON5, JSONC 같은 확장을 써.
- 날짜 타입이 없어 — 날짜는 그냥 문자열이야. 관행상 ISO 8601 로 적어 (
2026-05-04T01:30:11Z). - BigInt 가 없어 — 숫자는 전부 IEEE 754 float 이야. 253 를 넘어가면 정수 정밀도가 소리 없이 날아가.
- regex, Map, Set 이 없어 — JS 전용 타입은 평범한 object 나 array 로 풀어서 내보내야 해.
함의: JSON 은 어떤 언어의 완벽한 거울도 아니다
어느 언어든 자기 타입을 JSON 의 여섯 개에 끼워 맞춰야 해. Python tuple 은 array 가 되고, JavaScript undefined 는 null 이 되거나 아예 사라지고, 날짜는 ISO 문자열이 돼. 그래서 왕복시키려면 JSON.stringify 하나로는 부족하고 서로 약속한 관행이 필요해.
'JSON 은 날짜가 있다' 거짓말: ECMAScript 의
JSON.stringify 는 Date 를 ISO 문자열로 바꿔줘. 그런데 그 문자열을 JSON.parse 하면 돌아오는 건 Date 가 아니라 string 이야. 왕복이 안 맞는 거지. 진짜 날짜가 필요하면 reviver 함수를 쓰거나 schema 로 검증해.