본문 바로가기
C.W.K.
Stream
Lesson 06 of 08 · published

배열 — 순서 있음, 이종 허용, trailing comma 금지

~10 min · json, arrays, ordering

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

배열은 순서 있고, 대괄호로 감싸고, 콤마로 구분

배열은 [] 로 감싸. 객체 키와 달리 여기서는 순서가 뜻을 가져. 요소는 여섯 타입 아무거나 올 수 있고, 서로 타입이 달라도 돼. spec 상 JSON 배열은 섞여도 되는 배열이야. 물론 실제 API 들은 대부분 한 타입으로만 채우지만.

Trailing-comma 함정

JSON 은 마지막 요소 뒤에 콤마를 붙이는 걸 안 받아줘. [1, 2, 3,] 는 그대로 파스 에러야. JSON 문법 버그 중에 제일 흔한 게 이거야. Python, JavaScript, Rust, Go 가 자기 문법에서는 trailing comma 를 다 허용하니까, 손이 먼저 기억해서 계속 물어.

빈 배열 vs null vs 누락 키

세 상태는 서로 다른 말을 해. "items": [] 는 '목록은 아는데 비었다', "items": null 은 '아직 모른다', items 키를 아예 안 쓴 건 '이 개념이 여기엔 해당 안 된다' 야. 이 셋을 뒤섞는 API 는 남의 오후 하나를 통째로 잡아먹어.

원칙: 배열은 순서를 나르고 객체는 이름을 날라. 데이터에 자연스러운 순서가 있으면 (단계, 로그 항목, 검색 결과) 배열을 써. 이름으로 찾아 들어가는 게 자연스러우면 (설정, 필드, 속성) 객체를 쓰고. 순서 있는 데이터를 객체에 넣어두고 키가 들어간 순서에 기대는 짓만은 하지 마.

Code

배열 — 동종과 이종·json
{
  "strings": ["a", "b", "c"],
  "numbers": [1, 2, 3],
  "objects": [
    { "id": 1, "name": "alpha" },
    { "id": 2, "name": "beta" }
  ],
  "mixed": [1, "two", true, null, [3, 4]]
}
Trailing-comma 함정·json
[
  1,
  2,
  3,
]

# ↑ Parse error. JSON 은 trailing comma 금지.
# Python 과 JS 가 native 문법에선 허용 — 거기서 근육 기억이 와.
# 수정:
[
  1,
  2,
  3
]
Empty / null / missing — 다른 세 가지·json
{
  "known_empty":     [],
  "unknown_yet":     null,
  "explicit_value":  [1, 2, 3]
}

// 네 번째 상태는 키가 아예 없는 경우야.
// '이 개념이 이 리소스엔 해당 안 된다' 는 뜻으로 다뤄.
// API 라면 필드마다 관행을 하나 정해서 문서에 적어둬.

External links

Exercise

가까운 데 있는 CSV 파일 하나 골라. 표 모양이면 뭐든 좋아. 각 행을 컬럼 이름이 키가 된 객체로 바꿔서, 객체 배열 JSON 으로 옮겨. 그 순간 컬럼마다 타입을 하나씩 못 박은 셈이야 (문자열이냐 숫자냐 boolean 이냐). CSV 엔 schema 가 없었는데 JSON 에는 은근슬쩍 schema 가 생긴 거지. 어디서 찍어야 했는지 되짚어봐.

Progress

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

댓글 0

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

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