[JS] ๐Ÿ“œJSON์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž #2

์ด์ง€ํ˜„ยท2023๋…„ 8์›” 8์ผ
4

javascript

๋ชฉ๋ก ๋ณด๊ธฐ
5/9

< ์ด์ „ ๊ธ€: JSON ๊ฐœ๋… ์ •๋ฆฌ

3. JSON์˜ ๊ตฌ์กฐ

์š”์•ฝ

  • JSON์€ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„  ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฌธ์ž์—ด์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ํŒŒ์‹ฑ(Parsing)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์€ ๋ฌธ์ž์—ดํ™”(Stringification)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • JSON์€ Javascript ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ๋ฒ•์„ ๋”ฐ๋ฅด๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹๋ณ„์ž ๊ทœ์น™, ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ํƒ€์ž… ๋“ฑ์ด ์ œํ•œ๋˜๋ฉฐ ๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!

  • ์ /๋ธŒ๋ผ์ผ“ ํ‘œํ˜„๋ฒ•์„ ํ†ตํ•ด ๊ฐ์ฒด ๋‚ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„๊ณผ ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ ์ฒด์ธ์„ ํ†ตํ•ด ํ•˜์œ„ ๊ณ„์ธต์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋กœ ์•Œ์•„๋ณด๊ธฐ

์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด JS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด ํ‘œํ˜„๊ณผ JSON์˜ ํ‘œํ˜„ ๋ฐฉ์‹์„ ๋น„๊ตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

1.๋จผ์ € JavaScript์˜ ๊ฐ์ฒด ํ‘œํ˜„์„ ์•Œ์•„๋ด…์‹œ๋‹ค.

//JS์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด ํ‘œํ˜„
const array = [{}, {}, {}];
//JS์—์„œ ๊ฐ์ฒด์˜ ํ‘œํ˜„
const object = {
 
 /*ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ณ€์ˆ˜๋ช…์ฒ˜๋Ÿผ ์ž…๋ ฅ ๊ฐ€๋Šฅ(๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜)*/
 key1: `value1`, //๋ฌธ์ž์—ด
 key2: { name: 'man',  genter: "female" }, //๊ฐ์ฒด
 key_2: [1, 3, 4, 5], //๋ฐฐ์—ด
 
 /*ํ”„๋กœํผํ‹ฐ ํ‚ค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ž์—ด*/
 "key2": 2, //์ˆซ์ž
 "key-2": true, //๋ณ€์ˆ˜๋ช… ๊ทœ์น™์— ์–ด๊ธ‹๋‚œ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ๋ฌธ์ž์—ด๋กœ!!
 
 /*ํ”„๋กœํผํ‹ฐ ํ‚ค์— ์ˆซ์ž ๊ฐ€๋Šฅ(๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜)*/
 3: true, //๋ถˆ๋ฆฐ
 
 /*ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฐ€๋Šฅ*/
 sayHello: function () {
   console.log('Hi! My name is ' + this.name);
   //this๋กœ ํ•ด๋‹น ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
 } //ํ•จ์ˆ˜ ~ ๋ฉ”์„œ๋“œ
};

ํ”„๋กœํผํ‹ฐ ํ‚ค๋Š” ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ๋”ฐ์˜ดํ‘œ(โ€˜โ€™ ๋˜๋Š” โ€œโ€œ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํšจํ•œ ์ด๋ฆ„์ธ ๊ฒฝ์šฐ, ๋”ฐ์˜ดํ‘œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํšจํ•œ ์ด๋ฆ„์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

ํ”„๋กœํผํ‹ฐ ํ‚ค๋Š” ์•”๋ฌต์ ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— key2์™€ "key2"๋Š” ๊ฐ™์€ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰์— ์“ฐ์—ฌ์ง„ "key2"๋กœ ๋ถˆ๋Ÿฌ์™€์ง‘๋‹ˆ๋‹ค.

2.์ด์ œ JSON์˜ ํ˜•ํƒœ๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.

JSON๋‚ด๋ถ€์—์„œ๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! ์ง์ ‘์ ์ธ ์„ค๋ช…์„ ์œ„ํ•ด ์ฃผ์„ํ˜•ํƒœ๋ฅผ ๋นŒ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‚ด์šฉ์€ MDN์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

[ //๋ฐฐ์—ด ๋‚ด๋ถ€์— ๊ฐ์ฒด๋ฅผ ๋‹ด๋Š”๋‹ค. ~ ์˜ฌ๋ฐ”๋ฅธ JSON ํ˜•์‹
  
  //๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  {
    //ํ”„๋กœํผํ‹ฐ๋Š” ํ•ญ์ƒ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„
    "name": "Molecule Man", //๋ฌธ์ž์—ด ~ ํ•ญ์ƒ ํฐ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉ
    "age": 29, //์ˆซ์ž
    "secretIdentity": "Dan Jukes",
    "powers": [
      "Radiation resistance", 
      "Turning tiny", 
      "Radiation blast"
    ] //๋ฐฐ์—ด
    
  },//์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„!!!!!!!!
  
  //๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  {
    "name": "Madame Uppercut",
    "age": 39,
    "secretIdentity": "Jane Wilson",
    "powers": {
      "Million tonne punch": 1,
      "Damage resistance": 2,
      "Superhuman reflexes": 3
    } //๊ฐ์ฒด
  }
]

3.JSON ์‚ฌ์šฉํ•˜๊ธฐ

๋ฌธ์ž์—ด๋กœ ๋œ JSONํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

//json ํŒŒ์ผ
const myJson = [
 {name: "Chris", age: "38"},
 {name: "Egg", age: "17"}
];

//json ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ~ ๋ฌธ์ž์—ดํ™”
const mySTRING = JSON.stringify(myJson);

//json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ~ ํŒŒ์‹ฑ
const parsedJson = JSON.parse(mySTRING);

๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•ด๋ณธ๋‹ค๋ฉด

myJson
/*(2) [{โ€ฆ}, {โ€ฆ}]
0: {name: 'Chris', age: '38'}
1: {name: 'Egg', age: '17'}
length: 2
[[Prototype]]: Array(0)*/


myString
//'{"name":"Chris","age":"38"}'

ํ”„๋กœํผํ‹ฐ ํ‚ค์— ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค๋ฉด

//JSON๊ฐ์ฒด๋ณ€์ˆ˜๋ช…[๋ฐฐ์—ด์ธ๋ฑ์Šค].ํ”„๋กœํผํ‹ฐํ‚ค => ํ”„๋กœํผํ‚ค ๊ฐ’

//ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๊ธฐ ~ ์  ์‚ฌ์šฉ
parsedJson[0].name //'Chris'

//๋ฌธ์ž์—ด๋กœ ์ ‘๊ทผํ•˜๊ธฐ ~ ๋ธŒ๋ผ์ผ“ ์‚ฌ์šฉ
parsedJson[1]["name"] //'Egg'

๊ฒฐ๋ก 

์ฒ˜์Œ JSON์„ ์ ‘ํ•  ๋•Œ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋“ฑ์— ๋Œ€ํ•ด์„œ ๋งŽ์ด ๋‘๋ ค์› ์Šต๋‹ˆ๋‹ค. ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ํ† ํฐ์„ ๋‹ค๋ฃจ๋‹ค๋ณด๋‹ˆ ์–ด์ฉ” ์ˆ˜ ์—†์ด JSON์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ JSON์ด ๊ฐ€์žฅ ์‰ฝ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋ช‡๊ฐ€์ง€ ๊ทœ์น™๋งŒ ์ˆ™์ง€ํ•˜๊ณ  VScode์—๋Š” JSON์„ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ™•์žฅํŒฉ๋„ ํ™œ์šฉํ•˜๋‹ˆ JSON์„ ์ฝ๊ณ  ์‚ฌ์šฉํ•˜๋Š”๋ฐ ํฐ ์ง€์žฅ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฆ˜์€ JSON์—์„œ ๊ฐ€์žฅ ์–ด๋ ค์šด ์ ์ด JSON์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์งค ๋•Œ์ž…๋‹ˆ๋‹ค. ์“ธ๋ฐ์—†์ด ๊นŠ์ด๊ฐ€ ๊นŠ์–ด์ ธ ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ‚ค๋งŒ 4๊ฐœ๋ฅผ ๊ฑฐ์ณ์•ผ ๋  ๋•Œ๋„ ์žˆ์—ˆ๊ณ , ํ™•์‹คํ•˜๊ฒŒ ๋‚˜๋ˆ„์ง€ ์•Š์•„์„œ ์“ธ๋ชจ์—†๋Š” ๋ฐ์ดํ„ฐ๋„ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์™€์ง€๋Š” ๊ฒฝ์šฐ๋„ ์ƒ๊ฒจ์„œ ์ƒ๊ฐ์„ ๋งŽ์ด ํ•ด์„œ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•œ ๊ฑด, ์ง€์ง€๊ณ  ๋ณถ๊ณ  ํ•ด์•ผ ์ต์ˆ™ํ•ด์ง€๊ณ  ๋‹ค๋ฃจ๊ธฐ๋„ ํŽธํ•ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋„ค์š”! ๋‹ค์Œ์— ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ํ† ํฐ ์‚ฌ์šฉํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ JSON์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ–ˆ๋Š”์ง€ ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

profile
๊ฑด์ถ•ํ•™๋„์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ๋˜๊ธฐ

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 8์›” 8์ผ

์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ json ๊ตฌ์กฐ์™€ Javascript ๋‚ด ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์—ฌ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜
๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ