: 서로 다른 프로그램 사이에서 데이터 교환을 위해 만들어진 객체 형태의 포맷
아래와 같은 객체를 전송하려면 문자열처럼 범용적으로 읽을 수 있는 형태로 변환하여 전송해야 한다.
// 객체
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은 JavaScript의 객체와 비슷해보이지만, 미묘하게 다른 규칙이 있다.
JavaScript 객체 | JSON | |
---|---|---|
키 | 키는 따옴표 없이 쓸 수 있다. { key : "value" } | 키에도 따옴표를 붙여야 한다. '{"key":"value"}' |
문자열 값 | 작은 따옴표도 사용 가능 { key : 'value' } | 반드시 큰 따옴표 사용'{"key":"value"}' |
키와 값 사이 공백 | 가능 { key : 'value' } | 불가능 '{"key":"value"}' |
키-값 쌍 사이 공백 | 가능 { key : 'value', num : 1 } | 불가능 '{"key":"value","num":1}' |