Study & Project ✏️/JavaScript 🐥

JS JSON 입문!

JM 2021. 12. 28. 11:50
반응형

출처. https://www.youtube.com/watch?v=FN_D4Ihs3LE&t=222s 

예전에 프로젝트를 하면서 JSON을 썼었는데 JS에서 쓰니 깔끔한 것 같다.

C#이나 Python, c++은 복잡했던 기억이...

콜백 함수를 parameter로 줄 수 있어서 stringify 된 value값을

다시 obj로 살리는 reviver는 정말 이름값 하는 것 같다.

// JSON
// JavaScript Object Notation

// 1. Object to JSON
// stringfy(obj)
let json = JSON.stringify(true);
console.log(json);

json = JSON.stringify(['apple', 'banana']);
console.log(json);

const rabbit = {
    name: 'tori',
    color: 'white',
    size: null,
    birthDate: new Date(),
    jump: () => {
        console.log(`${name} can jump!`);
    },
};

// 함수는 JSON으로 변환되지 않는다.
// JS만의 datatype인 symbol도 변환되지 않는다.
json = JSON.stringify(rabbit);
console.log(json);

json = JSON.stringify(rabbit, ['name', 'color', 'size']);
console.log(json);

json = JSON.stringify(rabbit, (key, value) => {
    console.log(`key: ${key}, value: ${value}`);
    return key === 'name' ? 'CJM' : value;
});
console.log(json);

// 2. JSON to Object
// parse(json)
json = JSON.stringify(rabbit);
const obj = JSON.parse(json);
console.log(obj);
// 함수는 JSON으로 변환되지 않는다.
rabbit.jump();    // o
obj.jump();    // x

console.log(rabbit.birthDate.getDate());    // o
console.log(obj.birthDate);    // JSON으로 변환 될 때 stringify된 값이 출력된다.

// 그렇다면 obj에서도 birthDate를 object로 사용하고 싶다면?
const obj = JSON.parse(json, (key, value) => {
    console.log(`key: ${key}, value: ${value}`);
    return key === 'birthdate' ? new Date(value) : value;
});
console.log(obj.birthDate.getDate());    // o

기억할 것!!!

1. stringify(obj, replacer)

여기서 replacer는 내가 원하는 key값만 stringify 해 주는 것.

2. obj -> stringify -> parsed

obj에서 쓰이던 object(ex. new Date())는 parsed 된 곳에선 object로 사용할 수 없다.

왜? string값으로 넘어오기 때문

사용하려면

JSON.parse(obj, (key, value) => key === 'birthDate' ? new Date(value) : value;

정말 reviver라는 이름이 찰떡이다.

'Study & Project ✏️ > JavaScript 🐥' 카테고리의 다른 글

JS Promise 입문!  (0) 2022.01.04
JS callback 입문!  (0) 2021.12.28
JS 배열 API 공부  (0) 2021.12.27
JS array 입문!  (0) 2021.12.25
JS Class 입문!  (0) 2021.12.25