[Javascript] JSON
β¨ 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 ν λ λ°μ΄ν°κ° μ΄λ€ μμΌλ‘ μ λ¬λμ΄μΌ νλμ§ μ νν μ΄ν΄νμ§ λͺ»νκΈ° λλ¬Έμ λ°μν μΌμ΄μκΈ°μ μ΄ κΈ°νμ κΈ°λ³Έμ λ€μ‘κ³ μ νλ€.
μ°Έκ³ μλ£