๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/Javascript & NodeJS

[Javascript] JSON

by vodkassi 2021. 6. 5.
728x90

โœจ 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 ํ™” ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์ผ์ด์—ˆ๊ธฐ์— ์ด ๊ธฐํšŒ์— ๊ธฐ๋ณธ์„ ๋‹ค์žก๊ณ ์ž ํ–ˆ๋‹ค.

 

์ฐธ๊ณ ์ž๋ฃŒ 

Learn JSON in 10 Minutes

JSON ๊ณผ ๋ฉ”์„œ๋“œ

๋Œ“๊ธ€