네트워크를 통해 객체를 어딘가에 보내거나 로깅 목적으로 객체를 출력해야 한다면, 객체를 문자열로 전환해야 한다. 이때 전환된 문자열에는 원하는 정보가 있는 객체 프로퍼티 모두가 포함되어야만 한다.

객체의 프로퍼티로 함수를 추가하여 현 객체를 문자열로 변환하는 방식을 선택할 수도 있지만, 개발 과정에서는 프로퍼티가 추가되거나 삭제, 수정되는 일이 많다. 이렇게 되면 구현한 함수를 매번 수정해야 하는 번거로운 일이 생긴다.

따라서 자바스크립트에서는 JSON을 사용하여 위의 문제를 해결한다.

JSON은 값이나 객체를 나타내 주는 범용 포맷이다. 복잡한 구조를 가질 수 있는 데이터를 한 줄의 문자열로 표현해 준다.

서버와 클라이언트 등 데이터들을 주고받는 주체들 사이에 널리 사용된다.

본래 자바스크립트에서 사용할 목적으로 만들어진 포맷이지만, 라이브러리를 사용하면 자바스크립트가 아닌 언어에서도 다룰 수 있어서, JSON을 데이터 교환 목적으로 사용하는 경우가 많다. (특히 클라이언트 측 언어가 자바스크립트일 때)

자바스크립트가 제공하는 JSON 관련 메서드는 아래와 같다.

JSON.stringify

let student = {
  name: 'John',
  age: 30,
  isAdmin: false,
  courses: ['html', 'css', 'js'],
  wife: null
};

let json = JSON.stringify(student);

alert(typeof json); // 문자열

alert(json);
/* JSON으로 인코딩된 객체:
{
  "name": "John",
  "age": 30,
  "isAdmin": false,
  "courses": ["html", "css", "js"],
  "wife": null
}
*/

이렇게 변경된 문자열은 JSON으로 인코딩된, 직렬화 처리된, 문자열로 변환된, 결집된 객체라고 불린다. 객체는 이렇게 문자열로 변환된 후에야 비로소 네트워크를 통해 전송하거나 저장소에 저장될 수 있다.

JSON으로 인코딩된 객체는 일반 객체와 다른 특징을 가진다.

객체뿐만 아니라 원시값에도 적용할 수 있다.

적용할 수 있는 자료형은 다음과 같다.