[Section2] JSON

JSON

JSON의 탄생 배경

JSON : JavaScript Object Notation의 줄임말로, 데이터 교환을 위해 만들어진 객체 형태의 포멧이다. 네트워크를 통해 어떤 객체 내용을 다른 프로그램에게 전송한다고 가정했을때, 이 객체의 내용을 일종의 메신저 혹은 채팅 프로그램에서 쓰는 하나의 메세지라고 한다면 객체(메세지)는 어떻게 전송할 수 있을까?

const message = {
  sender: "김코딩",
  receiver: "박해커",
  message: "해커야 오늘 저녁 같이 먹을래?",
  createdAt: "2021-01-12 10:10:10"
}

메세지 객체가 전송 가능하려면, 메세지를 보내는 발신자와 메세지를 받는 수신자가 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을 수 있는 형태가 되어야 한다.

전송가능한 조건
 1. 수신자와 발신자가 같은 프로그램을 사용한다.
 2. 또는 문자열처럼 범용적으로 읽을 수 있어야 한다.

객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않는다. 자바스크립트에서 객체에 메소드(message.toString())나 형변환(String(message))을 시도하면, [object object] 라는 결과를 리턴한다.

이 문제를 해결하는 방법은 객체를 JSON 형태로 변환하거나 JSON을 객체의 형태로 변환하는 방법이 있다.

  • JSON.stringfy : Object type을 JSON으로 변환한다.
  • JSON.parse : JSON을 Object type으로 변환한다.
let transferableMessage = JSON.stringify(message)
console.log(transferableMessage)  // `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
console.log(typeof(transferableMessage)) // `string`

이렇게 stringfy 하는 과정을 직렬화라고 한다.

JSON으로 변환된 객체의 타입은 문자열이다. 발신자는 객체를 직렬화한 문자열을 누군가에게 객체의 내용을 보낼 수 있다. 그렇다면 수신자는 이 문자열 메세지를 어떻게 다시 객체의 형태로 만들 수 있을까. JSON.stringfy 와 정반다의 작업을 수행하는 메소드 JSON.parse 를 사용하면 가능하다.
이렇게 다시 객체의 형태로 변환하는 작업(JSON.parse)을 역직렬화라고 한다.

이처럼 JSON을 얼핏 보기에 자바스크립트의 객체와 별반 다를 바가 없어보이지만, 자바스크립트의 객체와는 미묘하게 다른 규칙이 있다.

자바스크립트 객체는 키에 따옴표 없이 사용가능하지만, JSON에서는 반드시 쌍따옴표를 붙여야 한다. 그리고 자바스크립트에서 문자열 값은 어떤 형태의 따옴표(큰따옴표, 작은따옴표, 백틱)도 사용 가능하지만 JSON에서는 반드시 쌍따옴표로 감싸야 한다.
또한 JSON은 키와 값사이 그리고 키-값 쌍 사이에는 공백이 있어서는 안된다.

스프린트 JSON

좋은 웹페이지 즐겨찾기