< ์ด์ ๊ธ: JSON ๊ฐ๋ ์ ๋ฆฌ
JSON์ ๋ฌธ์์ด ํํ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉ์ ์ํด์ ๊ฐ์ฒด๋ก ๋ณํํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ฌธ์์ด์์ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ฒ์ ํ์ฑ(Parsing)์ด๋ผ๊ณ ํฉ๋๋ค. ๋คํธ์ํฌ๋ฅผ ํตํด ์ ๋ฌํ ์ ์๊ฒ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ฌธ์์ดํ(Stringification)์ด๋ผ๊ณ ํฉ๋๋ค.
JSON์ Javascript ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ ๋ฐ๋ฅด๋ ๋ฌธ์์ด๋ก ๋ฐ์ดํฐ ๊ณ์ธต์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์๋ณ์ ๊ท์น, ํ ๋นํ ์ ์๋ ๊ฐ์ ํ์ ๋ฑ์ด ์ ํ๋๋ฉฐ ๋ฉ์๋๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค!
์ /๋ธ๋ผ์ผ ํํ๋ฒ์ ํตํด ๊ฐ์ฒด ๋ด ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ํ๋กํผํฐ ์ด๋ฆ๊ณผ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ์ฒด์ธ์ ํตํด ํ์ ๊ณ์ธต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํด JS์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด ํํ๊ณผ JSON์ ํํ ๋ฐฉ์์ ๋น๊ตํ์์ต๋๋ค.
//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"๋ก ๋ถ๋ฌ์์ง๋๋ค.
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
} //๊ฐ์ฒด
}
]
๋ฌธ์์ด๋ก ๋ 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์ ์ด๋ป๊ฒ ํ์ฉํ๋์ง ์ ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
์์๋ฅผ ํตํด์ json ๊ตฌ์กฐ์ Javascript ๋ด ์ฌ์ฉ๋ฒ์ ์ค๋ช ํ์ฌ ์ดํดํ๊ธฐ ์ฌ์ ์ต๋๋ค. ๐
๊ธ ์ ์ฝ์์ต๋๋ค! ๐