Front-End/Javascript
JSON
태나미
2021. 3. 7. 17:42
JSON (JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다.
JSON은 완벽하게 언어로부터 독립적이지만 C-family 언어 - C, C++, C#, Java, JavaScript, Perl, Python 그 외 다수 - 의 프로그래머들에게 친숙한 관습을 사용하는 텍스트 형식이다. 이러한 속성들이 JSON을 이상적인 DATA-교환 언어로 만들고 있다.
Json 특징
- JSON stands for JavaScript Object Notation
- JSON is a lightweight data-interchange format
- JSON is "self-describing" and easy to understand
- JSON is language independent *
JSON Example
JSON 공부 포인트
1. Object to JSON
const rabbit = {
name: 'tokki',
color: 'white',
size: null,
birthDate: new Date(),
jump: () => {
console.log(`${this.name} can jump`);
}
};
let json = JSON.stringify(rabbit);
console.log(json);
// {"name":"tokki","color":"white","size":null,"birthDate":"2021-03-05T16:58:16.436Z"}
json = JSON.stringify(rabbit, ['name', 'color']);
console.log(json);
// {"name":"tokki","color":"white"}
json = JSON.stringify(rabbit, (key, value)=>{
console.log(`key: ${key}, value: ${value}`);
// key: , value: [object Object]
// key: name, value: tokki
// key: color, value: white
// key: size, value: null
// key: birthDate, value: 2021-03-07T08:04:19.114Z
// key: jump, value: () => {
// console.log(`${this.name} can jump`);
// }
return key === 'name' ? 'taenam' : value;
});
console.log(json);
// {"name":"taenam","color":"white","size":null,"birthDate":"2021-03-07T08:08:11.557Z"}
JSON.stringify된 rabbit을 jump함수가 console에서 찍히지 않은 것을 볼 수 있는데,
함수는 object에 있는 data가 아니기 때문에 제외된다.
2. JSON to Object
// 위와 연결됨
const obj = JSON.parse(json);
console.log(obj);
// {name: "taenam", color: "white", size: null, birthDate: "2021-03-07T08:13:57.406Z"}
rabbit.jump();
// can jump
obj.jump();
// Uncaught TypeError: obj.jump is not a function
console.log(rabbit.birthDate.getDate());
// 7
console.log(obj.birthDate.getDate());
// Uncaught TypeError: obj.birthDate.getDate is not a function
// 다시 Date로 변환하고 싶을 때, callBack 함수를 이용할 수 있다.
obj = JSON.parse(json, (key, value) => {
return key==="birthDate" ? new Date() : value;
});
console.log(obj.birthDate.getDate());
// 7
- obj.jump()의 TypeError
변환한 오브젝트는 serialize가 된(스트링으로 만들어진 JSON)으로 부터
다시 Object를 만들었기 때문에, 함수는 serialize될 때, 포함이 되어있지 않았다.
- obj.birthDate.getDate()의 TypeError
obj의 birthDate는 serialize되어서 string 형태로 되어있는데,
이것을 다시 object화 시킬때도 string으로 할당이 되어, error가 났다
출처: www.youtube.com/watch?v=FN_D4Ihs3LE&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=10
JSON 관련 유용한 사이트: jsondiff.com/