JSON

YS_Study.log·2022년 1월 7일
0
post-custom-banner

JSON (JavaScript Object Notation)

json은 서로 다른 프로그램 사이에서 데이터 교환을 위해 만들어진 텍스트를 기반으로 하여 가볍고, 읽기도 편한 객체 형태의 포맷이다.
json은 다른 데이터를 주고 받는 포맷중에서, 가장 많이 쓰는데 대표적인 이유로는 "직렬화" 특징때문이다. 자바스크립트, c, c++, 자바 등 어떤 언어를 사용하든, 사용하는 플랫폼이 무엇이든지 상관없이 json으로 보내진 데이터는 각각의 언어의 특징에 맞는 객체로 변환되고, 반대로 다시 json형태로 바꿀 수 있다.

JSON의 규격사항

  • 반드시 ""(더블쿼트)를 사용하여 객체의 키와 문자열 값을 감싸야한다.
  • JSON은 키와 값 사이, 그리고 키-값 쌍 사이에는 공백이 있어서는 안됩니다.
//json 공백이 없다
// 객체의 키와 문자열 모두 ""로 감싸있다.
'{"name":"tori","color":"white"}'

자바스크립트 객체와 비교하기

  • 키는 따옴표없이 일반적으로 사용(키에 따옴표 사용해도 작동함), 문자열은 '', "" 둘다 가능
  • 공백이 가능하다.
{name: "tori", color: "white"} 

// 키에 따옴표 사용하면 이렇게도 가능은 하다-> {"name" : "tori","color" : "white"} 

JSON <-> Object 형태를 변환하는 방법 (메소드)

  • 객체를 JSON의 형태로 변환하거나 JSON을 객체의 형태로 변환하는 방법으로, 이를 위한 메소드는 다음과 같다.

  • JSON.stringify() : Object type을 JSON으로 변환합니다.

    • json.stringify 하는 이 과정을 직렬화(serialize)한다고 한다.
  • JSON.parse() : JSON을 Object type으로 변환합니다.

    • json.parse 를 적용하는 이 과정을 역직렬화(deserialize)한다고 한다.

JSON 포맷을 사용하여 데이터를 교환하는 예시

위의 메소드를 사용하는 방법은 무엇이며, 왜 변환해야하는지 알아본다.

예시) 이 객체 내용을 일종의 메신저에서 쓰는 하나의 메시지라고 한다면, 이 객체를 어떻게 전송할 수 있을까요?

  • 메시지 객체가 전송 가능하려면, 메시지를 보내는 발신자와 메시지를 받는 수신자가 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을 수 있는 형태여야 한다.
const message = {
  sender: "철수",
  receiver: "영희",
  message: " 영희야 좋아해",
  createdAt: "2021-01-12 10:10:10"
}

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

문제를 해결하는 방법은 위에 작성한 객체를 JSON의 형태로 변환하거나 JSON을 객체의 형태로 메소드를 사용하여 변환하는 방법입니다.

jSON으로 변환된 객체의 타입은 문자열입니다.

JSON.stringify() 사용하여 발신자는 객체를 직렬화한 문자열을 누군가에게 객체의 내용을 보낼 수 있습니다.

let transferableMessage = JSON.stringify(message)
console.log(transferableMessage)  
// `{"sender":"철수","receiver":"영희","message":"영희야 좋아해","createdAt":"2021-01-12 10:10:10"}`
console.log(typeof(transferableMessage)) 
// `string` <- 문자열로 변환

그렇다면 수신자는 이 문자열 메시지를 어떻게 다시 객체의 형태로 만들 수 있을까요?

  • JSON.stringify와 정반대의 작업을 수행을 하는 메소드 JSON.parse 를 사용할 수 있습니다.
let packet = `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
let obj = JSON.parse(packet)
console.log(obj)
/*
 * {
 * sender: "철수",
 * receiver: "영희",
 * message: "영희야 좋아해",
 * createdAt: "2021-01-12 10:10:10"
 * }
 */
 console.log(typeof(obj))
 // `object` <- 객체로 변환

JSON은 문자열로 객체를 인코딩하는 형식입니다. 직렬화 는 객체를 해당 문자열로 변환하는 것을 의미 하며 역 직렬화는 역 연산입니다 (문자열 변환-> 객체) .

참조 : 코드스테이츠

profile
느리지만 조금씩 공부하는 중 입니다. 현재 1년 6개월차 신입입니다 ><!
post-custom-banner

0개의 댓글