객체는 순서 없는 string-to-value 맵
JSON 객체는 { "key": value, ... } 형태야. 키는 반드시 큰따옴표 문자열이어야 해. 따옴표 없이 쓰는 단축형은 없어. 그건 JavaScript object literal 이지 JSON 이 아니야. 값 자리에는 여섯 타입 아무거나 올 수 있고, 중첩된 객체도 당연히 들어가.
순서 미지정
JSON spec 은 객체 키에 순서가 없다고 말해. 실제로는 파서 대부분이 넣은 순서를 지켜주긴 해 (Python dict 3.7 부터, JS object 의 숫자 아닌 키, Rust serde_json::Value::Object). 그래도 구현이 바뀌면 언제든 달라질 수 있어. 순서가 의미를 가진다면 키-값 쌍의 배열로 바꿔.
중복 키
spec 은 이 경우 동작을 정해두지 않았어. 파서 대부분은 마지막 것을 취하고 앞엣것을 말없이 버려. Python 의 json.loads 도 기본값이 그렇고. 반면 엄격한 validator 는 중복 자체를 에러로 잡아. 그러니까 애초에 쓰지 마.
원칙: 같은 이름의 키가 두 개 필요해졌다면 데이터 모양이 잘못 잡힌 거야. 배열로 중첩하든, schema 를 다시 짜든, 이름에 접두어를 붙이든 해. 중복 키가 어떻게 처리되는지는 구현이 어쩌다 그렇게 된 것이지 교환 포맷이 보장하는 기능이 아니야.