코드가 아니라 데이터 형식
JSON은 자바스크립트 표기에서 유래했지만 특정 언어에서만 사용하는 형식은 아니다. 다양한 언어의 파서가 같은 텍스트를 각자의 데이터 구조로 읽을 수 있다.
유효한 JSON에는 일반적인 주석이나 함수, undefined가 들어가지 않는다. 객체의 키와 문자열에는 큰따옴표를 사용하는 등 정해진 문법이 있다.
객체와 배열의 구분
객체는 이름과 값의 쌍을 모으고 배열은 값들을 순서대로 담는다. 배열의 순서는 데이터의 일부지만 객체의 키 순서에 프로그램의 의미를 의존하도록 설계하면 다른 구현 사이에 문제가 생길 수 있다.
객체 안에 같은 키가 중복되면 파서마다 처리 결과가 달라질 수 있다. 하나의 이름이 무엇을 뜻하는지 명확하게 유지하는 것이 상호운용성에 중요하다.
숫자의 표현 범위
JSON의 숫자 문법과 읽는 언어의 숫자 자료형은 같은 것이 아니다. 큰 정수를 부동소수점으로 읽는 환경에서는 정확한 값을 잃을 수 있다.
금액이나 긴 식별자처럼 정확성이 필요한 값은 교환 규칙을 별도로 정해야 한다. 날짜도 JSON 자체의 독립된 기본 타입이 아니므로 문자열 형식과 시간대의 해석을 약속해야 한다.
읽을 수 있음과 유효한 의미
파싱에 성공했다고 필요한 필드가 있고 값이 올바르다는 뜻은 아니다. 스키마와 응용 규칙으로 타입과 범위, 필수 항목을 검증해야 한다.
외부 JSON을 코드처럼 실행할 필요는 없다. 전용 파서를 사용하고 데이터 크기와 중첩 깊이를 제한하면 자원 소모와 잘못된 해석을 줄일 수 있다.