배열은 순서 있고, 대괄호로 감싸고, 콤마로 구분
배열은 [ 와 ] 로 감싸. 객체 키와 달리 여기서는 순서가 뜻을 가져. 요소는 여섯 타입 아무거나 올 수 있고, 서로 타입이 달라도 돼. spec 상 JSON 배열은 섞여도 되는 배열이야. 물론 실제 API 들은 대부분 한 타입으로만 채우지만.
Trailing-comma 함정
JSON 은 마지막 요소 뒤에 콤마를 붙이는 걸 안 받아줘. [1, 2, 3,] 는 그대로 파스 에러야. JSON 문법 버그 중에 제일 흔한 게 이거야. Python, JavaScript, Rust, Go 가 자기 문법에서는 trailing comma 를 다 허용하니까, 손이 먼저 기억해서 계속 물어.
빈 배열 vs null vs 누락 키
세 상태는 서로 다른 말을 해. "items": [] 는 '목록은 아는데 비었다', "items": null 은 '아직 모른다', items 키를 아예 안 쓴 건 '이 개념이 여기엔 해당 안 된다' 야. 이 셋을 뒤섞는 API 는 남의 오후 하나를 통째로 잡아먹어.
원칙: 배열은 순서를 나르고 객체는 이름을 날라. 데이터에 자연스러운 순서가 있으면 (단계, 로그 항목, 검색 결과) 배열을 써. 이름으로 찾아 들어가는 게 자연스러우면 (설정, 필드, 속성) 객체를 쓰고. 순서 있는 데이터를 객체에 넣어두고 키가 들어간 순서에 기대는 짓만은 하지 마.