JSON(JavaScript Object Notation)

Lian KimΒ·2022λ…„ 8μ›” 18일

πŸ“Œ JSONμ΄λž€?

JavaScript Object Notation의 μ•½μžλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈ 객체 문법.
데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ 전솑할 λ•Œ 많이 μ‚¬μš©λ˜λŠ” κ΅¬μ‘°ν™”λœ 데이터 ν‘œν˜„μ„ μœ„ν•œ ν‘œμ€€ ν˜•μ‹μ΄λ‹€. ν”„λ‘œκ·Έλž˜λ° 문법이 μ•„λ‹Œ λ‹¨μˆœνžˆ 데이터λ₯Ό ν‘œμ‹œν•˜λŠ” ν‘œν˜„ λ°©λ²•μœΌλ‘œ, μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ ꡐλ₯˜μ—μ„œ 많이 μ‚¬μš©λœλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ— μ’…μ†λ˜μ§€ μ•ŠλŠ” μ–Έμ–΄ λ…λ¦½ν˜• 데이터 포맷으둜, λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.



πŸ“Œ JSON ν˜•μ‹

JSON은 μžλ°”μŠ€ν¬λ¦½νŠΈ 객체와 μœ μ‚¬ν•˜κ²Œ 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœ μˆœμˆ˜ν•œ ν…μŠ€νŠΈλ‹€. JSON의 ν‚€λŠ” λ°˜λ“œμ‹œ ν°λ”°μ˜΄ν‘œ(μž‘μ€λ”°μ˜΄ν‘œ μ‚¬μš© λΆˆκ°€)둜 λ¬Άμ–΄μ•Ό ν•œλ‹€. 값은 객체 λ¦¬ν„°λŸ΄κ³Ό 같은 ν‘œκΈ°λ²•μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, λ¬Έμžμ—΄μ€ λ°˜λ“œμ‹œ ν°λ”°μ˜΄ν‘œλ‘œ λ¬Άμ–΄μ•Ό ν•œλ‹€.

{ "name": "홍길동" }

λ‹€μ–‘ν•œ 데이터 ν˜•μ‹μ„ μ‚¬μš©ν•  수 μžˆλ‹€.
(String, Number, Object, Array, Null, Boolean)

{
	"name": "홍길원",
	"age": 30,
	"gender": "남",
	"interests": ["μŒμ•…", "λŒ„μŠ€"],
	"family": {"fatehr": "ν™νˆ¬κΈΈ", "mom": "κΉ€μ—°μ‚Ό"},
	"school": null,
	"graduate": true 
}


πŸ“Œ JSON λ‚΄μž₯ λ©”μ„œλ“œ

JSON λ‚΄μž₯ λ©”μ„œλ“œλ₯Ό 톡해 JSON 객체λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈ 객체둜 λ³€ν™˜ν•  μˆ˜λ„, μžλ°”μŠ€ν¬λ¦½νŠΈ 객체λ₯Ό JSON 객체둜 λ³€ν™˜ν•  μˆ˜λ„ μžˆλ‹€.

JSON.parse()

JSON 객체 -> JavaScript 객체

Syntax

JSON.parse(text)
JSON.parse(text, reviver)

Example

let jsonData = `{
	"name": "홍길원",
	"age": 30, 
	"gender": "남",
	"interests": ["μŒμ•…", "λŒ„μŠ€"], 
	"family": {"fatehr": "ν™νˆ¬κΈΈ", "mom": "κΉ€μ—°μ‚Ό"}, 
	"school": null, 
	"graduate": true
}`;

let jsData = JSON.parse(jsonData);
console.log(jsData);

/*
{
  name: '홍길원',
  age: 30,
  gender: '남',
  interests: [ 'μŒμ•…', 'λŒ„μŠ€' ],
  family: { fatehr: 'ν™νˆ¬κΈΈ', mom: 'κΉ€μ—°μ‚Ό' },
  school: null,
  graduate: true
}
*/


console.log(typeof jsData); // object

JSON.stringify()

μžλ°”μŠ€ν¬λ¦½νŠΈ 객체 β†’ JSON 객체

Syntax

JSON.stringify(value)
JSON.stringify(value, replacer)
JSON.stringify(value, replacer, space)

Example

let jsData = {
	"name": "홍길원",
	"age": 30, 
	"gender": "남",
	"interests": ["μŒμ•…", "λŒ„μŠ€"], 
	"family": {"fatehr": "ν™νˆ¬κΈΈ", "mom": "κΉ€μ—°μ‚Ό"}, 
	"school": null, 
	"graduate": true
};

let jsonData = JSON.stringify(jsData);
console.log(jsonData);
// {"name":"홍길원","age":30,"gender":"남","interests":["μŒμ•…","λŒ„μŠ€"],"family":{"fatehr":"ν™νˆ¬κΈΈ","mom":"κΉ€μ—°μ‚Ό"},"school":null,"graduate":true}


console.log(typeof jsonData); // string

λ³€ν™˜ν•  μžλ°”μŠ€ν¬λ¦½νŠΈ 객체가 λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€λ©΄ 가독성이 ν˜„μ €ν•˜κ²Œ λ–¨μ–΄μ§ˆ 것이닀. μ΄λ•ŒλŠ” stringify() λ©”μ„œλ“œμ˜ μ„Έ 번째 μΈμžμ— λ“€μ—¬μ“°κΈ°ν•  곡백의 크기λ₯Ό μ „λ‹¬ν•˜μ—¬ μ§€μ •ν•  수 μžˆλ‹€.

// 두 μΉΈ λ“€μ—¬μ“°κΈ°
jsonData = JSON.stringify(jsData, null, 2);

console.log(jsonData);
/*
{
  "name": "홍길원",
  "age": 30,
  "gender": "남",
  "interests": [
    "μŒμ•…",
    "λŒ„μŠ€"
  ],
  "family": {
    "fatehr": "ν™νˆ¬κΈΈ",
    "mom": "κΉ€μ—°μ‚Ό"
  },
  "school": null,
  "graduate": true
}
*/


πŸ“Œ JSON μž₯단점

μž₯점

  • ν•¨μΆ•μ μœΌλ‘œ μ΅œμ†Œν•œμ˜ μ •λ³΄λ§Œ 가짐
  • μš©λŸ‰μ΄ μž‘κ³  속도가 빠름
  • νŠΉμ • 언어에 μ’…μ†λ˜μ§€ μ•ŠμŒ

단점

  • 함좕적인 정보 λ•Œλ¬Έμ— 의미 νŒŒμ•…μ΄ μ–΄λ €μšΈ 수 있음
  • κ²½λŸ‰μ˜ 데이터 κ΅ν™˜ ν˜•μ‹μ΄κΈ° λ•Œλ¬Έμ— λŒ€μš©λŸ‰κΈ‰μ˜ 데이터 μ†‘μˆ˜μ‹ μ—λŠ” 뢀적합할 수 있음
  • 주석을 μ§€μ›ν•˜μ§€ μ•ŠμŒ


참고 자료

MDN JSON JSON.parse() JSON.stringify()
이웅λͺ¨, γ€Žλͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive』, μœ„ν‚€λΆμŠ€

0개의 λŒ“κΈ€