JSON (JavaScript Object Notation)

지은·2022년 10월 23일
0

JavaScript

목록 보기
36/42
post-custom-banner

JSON (JavaScript Object Notation)

: 서로 다른 프로그램 사이에서 데이터 교환을 위해 만들어진 객체 형태의 포맷

아래와 같은 객체를 전송하려면 문자열처럼 범용적으로 읽을 수 있는 형태로 변환하여 전송해야 한다.

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

// 문자열
`{"sender":"김코딩","receiver":"박해커","message":"해커야 오늘 저녁 같이 먹을래?","createdAt":"2021-01-12 10:10:10"}`
  • 이때, 객체를 문자열로 변환하기 위해서 toString() 이나 String() 메소드를 사용한다면 '[object Object]'라는 결과를 리턴한다.
  • 객체는 타입 변환을 이용해 문자열로 변환할 경우 객체의 내용을 포함하지 않기 때문이다.

➡️ 따라서, 객체JSON 형식으로 변환하고, JSON 형식객체로 변환하여 사용해야 한다.

String().toString()의 차이

  • String() : 어떤 type이든 값을 문자열로 변환한다.
String(null);      // 'null'
String(undefined); // 'undefined'
  • .toString() : null(빈 값)과 undefined(할당되지 않은 값)은 type 변환 시 에러가 발생한다.
null.toString();      // ❗️Uncaught TypeError: Cannot read properties of null (reading 'toString')
undefined.toString(); // ❗️Uncaught TypeError: Cannot read properties of undefined (reading 'toString')

JSON.stringify()

JSON.stringify(value) : 객체를 JSON 형식으로 변환해주는 메소드

stringify해주는 과정을 직렬화(serialize)한다고 한다.

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

console.log(typeof stringifiedMessage); // string

JSON.parse()

JSON.parse(value) : JSON 형식을 객체로 변환해주는 메소드

직렬화된 JSON에 JSON.parse() 메소드를 적용하면 다시 객체의 형태로 변환할 수 있다.
이 과정을 역직렬화(deserialize)한다고 한다.

let parsedMessage = JSON.parse(stringifiedMessage);
// {sender: '김코딩', receiver: '박해커', message: '해커야 오늘 저녁 같이 먹을래?', createdAt: '2021-01-12 10:10:10'}

console.log(typeof parsedMessage); // object

JSON 기본 규칙

JSON은 JavaScript의 객체와 비슷해보이지만, 미묘하게 다른 규칙이 있다.

JavaScript 객체JSON
키는 따옴표 없이 쓸 수 있다.
{ key : "value" }
키에도 따옴표를 붙여야 한다.
'{"key":"value"}'
문자열 값작은 따옴표도 사용 가능
{ key : 'value' }
반드시 큰 따옴표 사용
'{"key":"value"}'
키와 값 사이 공백가능
{ key : 'value' }
불가능
'{"key":"value"}'
키-값 쌍 사이 공백가능
{ key : 'value', num : 1 }
불가능
'{"key":"value","num":1}'
profile
블로그 이전 -> https://janechun.tistory.com
post-custom-banner

0개의 댓글