JSON은 프로그램 사이에서 구조화된 데이터를 교환하는 텍스트 형식이다. 객체와 배열, 문자열, 숫자, 불리언, null을 표현한다. 이름에 JavaScript가 들어가지만 특정 언어에 종속되지 않으며 다양한 서버와 클라이언트에서 사용할 수 있다.
값과 구조
객체는 문자열 이름과 값의 쌍을 담고, 배열은 값의 순서를 유지한다. 객체 속성의 순서를 업무 규칙으로 사용하지 않는 편이 상호 운용에 유리하다. 같은 이름을 중복해서 넣으면 구현별 해석이 달라질 수 있다. JSON 표준 RFC 8259
문서 API의 예
위키 문서를 전달한다면 제목은 문자열, 공개 여부는 불리언, 태그는 배열로 표현할 수 있다. 예를 들어 {"title":"SQL","published":true,"tags":["database"]}는 이런 구조를 나타낸다.
| 필드 | 값의 의미 |
|---|---|
| title | 문서 제목 |
| published | 공개 상태 |
| tags | 순서 있는 태그 목록 |
숫자 0, 빈 문자열, null, 필드 자체가 없는 경우는 서로 다른 상태다. REST API를 설계할 때 각 상태를 어떻게 해석할지 문서화해야 한다. 특히 수정 요청에서 null이 삭제를 뜻하는지 빈 값을 뜻하는지 합의가 필요하다.
문법과 검증의 차이
JSON에는 기본적으로 주석이나 날짜 전용 타입이 없다. 날짜를 문자열로 보낼 때는 형식을 별도로 정해야 한다. NaN과 Infinity도 JSON 숫자에 포함되지 않는다. MDN JSON 문법 큰 정수는 수신 프로그램의 숫자 정밀도를 넘을 수 있으므로 식별자를 문자열로 전달하는 설계가 필요할 수 있다.
파싱 성공은 문법이 맞다는 뜻일 뿐 필수 필드나 권한이 올바르다는 의미가 아니다. OpenAPI 같은 계약과 애플리케이션 검증을 통해 허용할 구조를 정의한다. PostgreSQL에 저장할 때는 원문 보존과 검색 요구에 따라 JSONB 등 적절한 타입을 선택한다.