C.W.K.
Stream
Lesson 02 of 08 · published

여섯 타입 — 그리고 빠진 것들

~10 min · json, types, spec

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

여섯 값, 예외 없음

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 undefinednull 또는 부재. 날짜는 ISO 문자열. 라운드트립엔 그냥 JSON.stringify 가 아니라 관행이 필요해.

'JSON 은 날짜가 있다' 거짓말: ECMAScript 의 JSON.stringify 가 Date 에서 ISO 문자열 만들고; 같은 문자열을 JSON.parse 하면 Date 가 아니라 string. 라운드트립 실패. 진짜 날짜 필요하면 reviver 함수나 schema validation 써.

Code

한 문서에 6 타입 모두·json
{
  "a_string": "hello",
  "a_number": 42,
  "a_boolean": true,
  "a_null": null,
  "an_object": { "nested": true },
  "an_array": [1, 2, 3]
}
JS 에는 있는데 JSON 엔 안 들어가는 것·javascript
// 이건 다 JSON.stringify 에서 죽거나 모양 바뀜:
undefined         // object 키에선 부재, array slot 에선 null
function(){}      // 부재
NaN, Infinity     // null 됨
123n              // BigInt — TypeError
new Date()        // "2026-05-04T01:30:11.000Z" (string)
new Map()         // {} (빈 object)
new Set()         // {} (빈 object)
Symbol('x')       // 부재
Reviver 로 Date 라운드트립·javascript
const text = '{"created_at":"2026-05-04T01:30:11.000Z"}';
const data = JSON.parse(text, (key, value) => {
  if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}T/.test(value)) {
    return new Date(value);
  }
  return value;
});
console.log(data.created_at instanceof Date);  // true

External links

Exercise

최근에 직렬화한 Python dict (또는 JS object) 골라. 안의 모든 타입 나열. 각 타입에 대해 자문: 이게 JSON 6 타입 중 하나인가? 아니면 json.dumps / JSON.stringify 에서 뭐가 되나? 일치 안 하는 곳이 라운드트립 버그 사는 곳이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.