JSON.stringify

1abme·2023년 4월 12일
0

JSON


JSON 은 JavaScript Object Notation의 줄임말로 데이터 교환을 위해 만들어진 객체 형태의 포멧이다.

네트워크를 통해 어떤 메신저 혹은 채팅 프로그램에서 쓰는 하나의 메시지 내용을 담은 객체를 다른 프로그램에 전송해야한다면 메시지를 보내는 발신자와 메시지를 받는 수신 같은 프로그램을 사용하거나 문자열처럼 범용적으로 읽을 수 있는 형태여야 한다.

전송할 수 있는 조건 (transferable condition)

- 수신자(reciever)와 발신자(sender)가 같은 프로그램을 사용한다.

- 또는, 문자열처럼 범용적으로 읽을 수 있어야 한다.

객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않는다. JavaScript에서 객체를 문자열을 변환하기 위해 메서드 (message.toString()) 나 형변환 (String(message)) 를 시도한다면 [object Object] 결과를 보게 될 것이다.

이 문제를 해결하는 방법은 객체를 JSON형태로 변환하거나 JSON을 객체 형태로 변환하는 방법이 있다.이를 위한 메서드는 아래와 같다

  • JSON.stringify : 객체를 JSON으로 변환
  • JSON.parse : JSON을 객체로 변환

이를 사용해 메세지를 발신 해본다면 우선 발신 전 JSON.stringify 를 사용해 객체를 JSON형태로 변환해야 하며 stringify하는 이 과정을 직렬화(serialize)한다고 부른다.

// JSON.stringify 의 예

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

let transferableMessage = JSON.stringify(message)

console.log(transferableMessage) 
// `{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`

console.log(typeof(transferableMessage))
// `string`

이렇게 JSON으로 변환된 객체의 타입은 문자열이되며 이를 보내면 된다. 이렇게 발신된 데이터를 수신했다면 다시 객체의 형태로 만들어야 한다. 이때 JSON.parse를 사용하면 되며 JSON.parse를 적용하는 이 과정을 역직렬화(deserialize)한다고 한다.

// 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은 서로 다른 프로그램 사이에서 데이터를 교환하기 위한 포맷이며 이 JSON 포맷은 자바스크립트를 포함한 많은 언어에서 범용적으로 사용하는 유명한 포맷이다.

JSON의 기본 규칙


JSON은 얼핏 보기에 자바스크립트의 객체와 별만 다를바 없어보이지만 자바스크립트의 객체와는 조금 다른 규칙이 있다.

	 키 
-------------
자바스크림트 객체:		키는 따옴표 없이 쓸 수 있음 
					{ key : "property"}
                    
JSON:				반드시 쌍따옴표를 붙여야 함
					'{"key":"property"}'
                    
                    
                    
                    
   문자열 값
-------------
자바스크림트 객체:		작은따옴표도 사용 가능
					{ "key" : 'property' }

JSON:				반드시 작은따옴표로 감싸야 함
					'{"key":"property"}'
                    
                    
                    
                    
키와 값 사이 공백
-------------
자바스크림트 객체:		사용 가능
					{"key" : 'property'}

JSON:				사용 불가능
					'{"key":"property"}'                           
                    
                    
                    
키-값 쌍 사이 공백
---------------
자바스크림트 객체:		사용 가능
					{ "key":'property', num:1 }

JSON:				사용 불가능
					'{"key":"property","num":1}'                
profile
제가 이해하고 있는게 맞나요...?

0개의 댓글

관련 채용 정보