โจ JSON ์ด๋?
Javascript Object Notation ์ ์ฝ์๋ก, XML (Extensible Markup Language) ์ด๋ YAML ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์ (๊ฐ์ฒด) ์ค ํ๋์ด๋ค.
์ฉ๋์ด ์๊ณ ์ง๊ด์ ์ผ๋ก ์ฝ๊ณ ์ธ ์ ์๋ค๋ ์ฅ์ ๋๋ถ์ ๋๋ถ๋ถ์ ์น API ๋ Configuration ํ์ผ์ ํ์ฉ๋๋ค.
Javascript ์์ ํธํ์ฑ๋ ๋์ผ๋ฉฐ, ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ JSON ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ ์ ์๋ ๋ด์ธ์ฅ ๋ชจ๋์ด ์กด์ฌํ๋ค. (ex: python ์ json ๋ชจ๋)
XML vs JSON
// xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
// JSON
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
}
]
}
โจ Supported Data Types (์ง์๋๋ ๋ฐ์ดํฐ ํ์ )
- String, Numbers, Booleans, Null, Arrays, Objects
โจ Unsupported Data Types (์ง์๋์ง ์๋ ๋ฐ์ดํฐ ํ์ )
- Infinity, NaN
โจ JSON rules (๋ช ๊ฐ์ง ๊ท์น ๋ฐ ๋ฌธ๋ฒ)
- JSON ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฒด (Object) ํํ๋ก ์ ๋ฌ๋๋ค.
- ๋ชจ๋ String ์ ๊ผญ double quote (" ") ๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
- Javascript ๋ด ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด๋ ๋ฐฐ์ด, ๋ฌธ์์ด์ JSON.stringify() ๋ก ๊ฐ์ธ์ค๋ค๋ฉด JSON ๋ฌธ๋ฒ์ ๋ง๋ JSON ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์๋ค.
- JSON.stringify() ์ Function, Symbol, ๊ฐ์ด undefined ์ธ ํ๋กํผํฐ๋ ๋ฌด์๋๋ค.
- ์ํ ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ฅผ stringify ํ๋ ค๋ฉด ์กฐ๊ธ ๋ ๊น๋ค๋ก์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค (์ฐธ๊ณ ์๋ฃ ์ฐธ์กฐ)
JSON.stringify('haha') // '"haha"'
JSON.stringify({'one':'json'}) // '{"one":"json"}'
JSON.stringify(['one', 'haha']) // '["one", "haha"]'
let user = {
sayHi() { // ๋ฌด์
alert("Hello");
},
[Symbol("id")]: 123, // ๋ฌด์
something: undefined // ๋ฌด์
};
alert( JSON.stringify(user) ); // {} (๋น ๊ฐ์ฒด๊ฐ ์ถ๋ ฅ๋จ)
JSON์ผ๋ก ์ธ์ฝ๋ฉ ๋ (์ง๋ ฌํ ์ฒ๋ฆฌ๋ serialized, ๋ฌธ์์ด๋ก ๋ณํ๋ stringified, ์ง๋ ฌํ๋ serialized) ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ก JSON ํ ํด์ฃผ๋ ๋ฉ์๋๋ JSON.parse() ์ด๋ค.
โจ More about JSON.stringify()
JSON.stringify ์ ๋งค๊ฐ๋ณ์๋ JSON.stringify(value, replacer, space)
์ด๋ค.
value
: stringify ํ๊ธธ ์ํ๋ ๊ฐ
replacer
: stringify ํ๊ธธ ์ํ๋ ํ๋กํผํฐ๊ฐ ๋ด๊ธด ๋ฐฐ์ด ๋๋ ๋งคํ ํจ์
space
: ๊ณต๋ฐฑ ๋ฌธ์ ์
space ์์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๋ ์ผ๋ ฌ๋ก ์ ๋ ฌ๋๋, ๊ฐ๋ ์ฑ์ ๋์ด๊ธธ ์ํ๋ค๋ฉด space ์ ๊ฐ๋งํผ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ํด ์ค๋ค.
let user = {
name: "John",
age: 25,
roles: {
isAdmin: false,
isEditor: true
}
};
JSON.stringify(user)
// '{"name":"John","age":25,"roles":{"isAdmin":false,"isEditor":true}}'
JSON.stringify(user, null, 2)
// '{\n' +
// ' "name": "John",\n' +
// ' "age": 25,\n' +
// ' "roles": {\n' +
// ' "isAdmin": false,\n' +
// ' "isEditor": true\n' +
// ' }\n' +
// '}'
Date ๊ฐ์ฒด์๋ ๋ด์ฅ toJSON ๋ฉ์๋๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ stringify ๊ฐ ๊ฐ๋ฅํ๋ค.
JSON.stringify(new Date()) // '"2021-05-31T14:09:52.925Z"'
โจ ๋ง๋ฌด๋ฆฌ
EffectJS ๊ณผ์ ๋ฅผ ํ๋ฉฐ ์ ๋ฌ๋ฐ๋ ๋ฐ์ดํฐ ํ์ ์ด json ์ธ์ง text ์ธ์ง์ ๋ฐ๋ผ ํ์ฑํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๋ ์ ์ ํ์ธํ ์ ์์๋ค. (์ด๋ HTTP request, response ์ Content-type ์ ์ํฅ์ ๋ฐ๋๋ฐ, application/json ์ผ ๊ฒฝ์ฐ json ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฒ ๋์ง๋ง text/plain ์ธ ๊ฒฝ์ฐ ์ผ๋ฐ string ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฒ ๋๋ค.)
// Response ์ Content-type : Application/json
fetch('someurl').then(res => res.json()) // body ๋ฅผ json ์ผ๋ก ๋ณํ
// Response ์ Content-type : text/plain
fetch('someotherurl').then(res => res.text()) // body ๋ฅผ string ์ผ๋ก ๋ณํ
JSON ๊ฐ์ฒด์ ํน์ง๊ณผ ์ฉ๋๋ฅผ ์ด๋ก ์ ์ผ๋ก ์ดํดํ๋ ๊ฒ์ ๋น๊ต์ ์ฌ์ฐ๋ HTTP ํต์ ์ ์ง์ ์ ์ฉํด๋ณด๋ ค๋ ๋นํน์ค๋ฌ์ด ์๊ฐ์ด ์ฌ๋ฌ ์ฐจ๋ก ์์๋ค. JSON ํ ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์์ผ๋ก ์ ๋ฌ๋์ด์ผ ํ๋์ง ์ ํํ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ผ์ด์๊ธฐ์ ์ด ๊ธฐํ์ ๊ธฐ๋ณธ์ ๋ค์ก๊ณ ์ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
'๐ป DEV > Javascript & NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS] NodeJS ๋ Single Thread ์ผ๊น? Multi Thread ์ผ๊น? (1) | 2021.09.06 |
---|---|
[Javascript] ๊ตฌ์กฐ๋ถํด ํ ๋น (0) | 2021.06.05 |
[Javascript] ExpressJS (Intro) (0) | 2021.06.05 |
[Javascript] Fetch API (0) | 2021.05.27 |
[Javascript] Async ํจ์์ Await (0) | 2021.05.27 |
๋๊ธ