๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

JavaScript (ES6) - ์„œ๋ฒ„ ํ†ต์‹ ์˜ ์‹œ์ž‘ JSON

๊ธ€์„ ์ž‘์„ฑํ•˜๊ธฐ์— ์•ž์„œ ์ด ๊ฒŒ์‹œ๊ธ€์˜ ๋ชจ๋“  ๊ธ€์€ ์œ ํŠœ๋ธŒ ๋“œ๋ฆผ์ฝ”๋”ฉ by ์—˜๋ฆฌ๋‹˜์˜ ๋™์˜์ƒ์ด ์ถœ์ฒ˜์ž„์„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

https://www.youtube.com/watch?v=yOdAVDuHUKQ&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=8

 

JSON

JavaScript Object Notation

 

 

JSON ์ด๋ž€ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„ ๋น„๋™๊ธฐ ํ†ต์‹ , ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๋“ฑ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค ๋˜ ๋ธŒ๋ผ์šฐ์ €๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋ฐ”์ผ์—์„œ ์„œ๋ฒ„์™€ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ๋˜๋Š” ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•˜์ง€ ์•Š์•„๋„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํŒŒ์ผ์‹œ์Šคํ…œ์— ์ €์žฅํ•  ๋•Œ๋„ JSON์„ ์ด์šฉํ•œ๋‹ค!

โ€‹

JSON์€ key์™€ value๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค

โ€‹

์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง๋ ฌํ™” ( serialize ) ํ•ด์„œ ์–ด๋–ป๊ฒŒ JSON์œผ๋กœ ๋ณ€ํ™˜ํ• ์ง€,

์ง๋ ฌํ™”๋œ JSON์„ ( deserialize ) ํ•ด์„œ ๋‹ค์‹œ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ• ์ง€๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์•Œ์•„๋ณด์ž

 

 

 

Object to JSON

 

 

์˜ค๋ธŒ์ ํŠธ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

 

 

let json = JSON.stringify

 

 

์œ„์ฒ˜๋Ÿผ JSON ์˜ค๋ธŒ์ ํŠธ ์•ˆ์— ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ API ์ค‘์— stringify๋ฅผ ์ด์šฉํ•˜๋ฉด ๋˜๋ฉด ์˜ค๋ธŒ์ ํŠธ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค

โ€‹

์ด์ œ ๋ฐฐ์—ด์„ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด๋ณด์ž

 

 

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

 

์œ„์™€ ๊ฐ™์ด apple๊ณผ banana๋ผ๋Š” ๋ฐฐ์—ด์„ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด

 

 

["apple","banana"]

 

 

์œ„์™€ ๊ฐ™์ด ๋ณ€ํ™˜์ด ๋œ๋‹ค

โ€‹

์ด๋ฒˆ์—๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด๋ณด์ž

 

 

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

let json = JSON.stringify(rabbit);
console.log(json);

 

 

์œ„์™€ ๊ฐ™์ด rabbit์ด๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค ๊ทธ ํ›„ json์„ ์ถœ๋ ฅํ•ด๋ณด๋ฉด

 

 

{"name":"tori","color":"white","size":null,
"birthDate":"2020-09-03T17:08:11 ... "}

 

์œ„์™€ ๊ฐ™์ด ์ถœ๋ ฅ์ด ๋˜๋Š”๋ฐ jump๋Š” ์ถœ๋ ฅ์ด ์•ˆ ๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

jump๋Š” ์˜ค๋ธŒ์ ํŠธ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ์™ธ๋˜๋Š” ๊ฒƒ์ด๋‹ค

โ€‹

๋˜ JSON์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œํ•œํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ

 

 

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

 

 

์œ„์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋งŒ JSON ๋ณ€ํ™˜ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค'

 

 

{"name":"tori","color":"white"}

 

 

๋˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค

 

 

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

 

 

์œ„์ฒ˜๋Ÿผ key์™€ value๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด

โ€‹

์ฝ˜์†”์— rabbit์˜ key์™€ value๋“ค์ด ์ „๋‹ฌ์ด ๋˜๊ณ 

return์— key๋กœ name์ด ํฌํ•จ๋˜๋ฉด 'song'์œผ๋กœ ๋ฐ”๊พธ๊ณ  name์ด ์•„๋‹ ๊ฒฝ์šฐ ์›๋ž˜์˜ value๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค

 

 

{"name":"song","color":"white","size":null,
"birthDate":"2020-09-03T17:08:11 ... "}

 

 

name์ด 'song'์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

 

 


 

JSON to Object

 

 

์ด๋ฒˆ์—๋Š” JSON์„ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” parse์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

 

 

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

 

 

์˜ˆ์‹œ๋ฅผ ์œ„ํ•ด ์œ„์—์„œ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๋ณด๊ธฐ!

 

 

let json = JSON.stringify(rabbit);
const obj = JSON.parse(json);
console.log(json);

 

 

์šฐ์„  json ๋ณ€์ˆ˜์— rabbit ์˜ค๋ธŒ์ ํŠธ๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ „๋‹ฌํ–ˆ๋‹ค

๊ทธ ์ดํ›„ parse๋ฅผ ์‚ฌ์šฉํ•ด json์„ ๋‹ค์‹œ obj๋กœ ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ ์ฃผ๋ฉด์„œ deserialize ๋˜์—ˆ๋‹ค!

 

 

์ถœ๋ ฅํ•ด๋ณด๋ฉด

 

 

{name:"tori",color:"white",size:null,
birthDate:"2020-09-03T17:08:11 ... "}

 

 

์œ„์ฒ˜๋Ÿผ rabbit ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ถœ๋ ฅ์ด ๋œ๋‹ค

โ€‹

์—ฌ๊ธฐ์„œ ํฌ์ธํŠธ !

 

 

console.log(rabbit.birthDate.getDate());
console.log(obj.birthDate.getDate());

 

rabbit ์˜ birthDate๋Š” Date() ๋ผ๋Š” API๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๊ณ  ( ์•„๋ž˜๋ฅผ ์ฐธ๊ณ  )

 

 

birthDate: new Date()

 

 

obj ๋Š” rabbit์„ JSON์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋„˜๊ฒจ ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— (์•„๋ž˜๋ฅผ ์ฐธ๊ณ )

 

 

{"name":"song","color":"white","size":null,
"birthDate":"2020-09-03T17:08:11 ... "}

 

rabbit์˜ getDate๋Š” ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ์ด ๋˜์ง€๋งŒ

obj์˜ getDate๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

โ€‹

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด reviver ์ด๋ผ๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š”๋ฐ

 

 

let json = JSON.stringify(rabbit);
const obj = JSON.parse(json, (key, value) => {
  return key === 'birthDate' ? new Date(value) : value;
});

console.log(json);

 

 

์œ„์—์„œ key์™€ value๋ฅผ ๋ฐ›์•„ ๋ฆฌํ„ด์„ ํ•˜๋Š”๋ฐ key์— birthDate ๋ผ๋Š” key๊ฐ€ ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด Date๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  key๊ฐ€ birthDate ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋Œ€๋กœ ์›๋ž˜ ์žˆ๋˜ value ๋ฅผ ์“ฐ๋„๋ก ํ–ˆ๋‹ค

โ€‹

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๊ณ  ๋‚˜์„œ

 

 

console.log(rabbit.birthDate.getDate());
console.log(obj.birthDate.getDate());

 

 

๋‹ค์‹œ ํ•œ๋ฒˆ ๋˜‘๊ฐ™์ด getDate ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ™์€ ๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ์ด ๋œ๋‹ค !

โ€‹