B27: JSON ๋ฉ”์„œ๋“œ

2025. 8. 26. 20:09ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. JSON

2. JSON.stringify

3. JSON.parse


1. JSON

JSON(JavaScript Object Notation)์€ ๊ฐ’, ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๋ฒ”์šฉ ํฌ๋งท์ด๋‹ค.

 

๊ฐ์ฒด๋ฅผ ์–ด๋”˜๊ฐ€๋กœ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•  ๋•Œ, ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ํ•ด์•ผํ•œ๋‹ค.

์ด ์ž‘์—…์„ ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์งˆ ๋•Œ๋งˆ๋‹ค toString()์œผ๋กœ ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊นŒ๋‹ค๋กœ์šด๋ฐ, ์ด๋Ÿด ๋•Œ JSON ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • JSON.stringify : ๊ฐ์ฒด → JSON ๋ณ€ํ™˜
  • JSON.parse : JSON → ๊ฐ์ฒด ๋ณ€ํ™˜

 


2. JSON.stringify

 

JSON.stringify() ๋ฉ”์„œ๋“œ์— ์ธ์ž๋กœ ๊ฐ์ฒด/์›์‹œ๊ฐ’์„ ๋„˜๊ธฐ๋ฉด ๋ณ€ํ™˜๋œ ๋ฌธ์ž์—ด์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฌธ์ž์—ด์€ JSON-encoded, serialized, stringified, marshalled ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ ๊ฐ์ฒด๋Š” ๋„คํŠธ์›Œํฌ๋กœ ์ „์†กํ•˜๊ฑฐ๋‚˜, ์ €์žฅ์†Œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฌธ์ž์—ด์€ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค.
  • ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์€ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค.

 

1. JSON.stringify ๋ฌธ๋ฒ•

let json = JSON.stringify(value, [replacer, space]);
  • value : ์ธ์ฝ”๋”ฉ ํ•˜๋ ค๋Š” ๊ฐ’
  • replacer : JSON์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ธธ ์›ํ•˜๋Š” ๋ฐฐ์—ด/๋งคํ•‘ ํ•จ์ˆ˜
  • space : ์„œ์‹ ๋ณ€๊ฒฝ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ณต๋ฐฑ ๋ฌธ์ž ์ˆ˜

๋Œ€๋‹ค์ˆ˜์˜ ๊ฒฝ์šฐ, ์ธ์ˆ˜๋ฅผ ํ•œ ๊ฐœ๋งŒ ๋„˜๊ฒจ์„œ ์‚ฌ์šฉํ•˜๋‚˜,

์ „ํ™˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •๊ตํ•˜๊ฒŒ ์กฐ์ •ํ•˜๋ ค๋ฉด ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜(๋ฐฐ์—ด)์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

 

โœ… ์ธ์ˆ˜ ํ•˜๋‚˜๋งŒ ๋„˜๊ธฐ๋Š” ๊ฒฝ์šฐ

let student = {
  name: 'John',
  age: 30,
  isAdmin: false,
  courses: ['html', 'css', 'js'],
  wife: null
};

let json = JSON.stringify(student);

console.log(typeof json);	// string
console.log(json);
/*
{
  "name": "John",
  "age": 30,
  "isAdmin": false,
  "courses": ["html", "css", "js"],
  "wife": null
}
*/

JSON.stringify์— ๊ฐ์ฒด ํ•˜๋‚˜๋งŒ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์„œ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟจ๋‹ค.

 

 

โœ… ์ธ์ˆ˜๋ฅผ ๋‘ ๊ฐœ ๋„˜๊ธฐ๋Š” ๊ฒฝ์šฐ

JSON.stringify๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.

let a = { number: 23 };

let b = { string = "hi" };

a.string = b;
b.number = a;

JSON.stringify(a);	// Error: Converting circular structure to JSON

 

์ด๋Ÿฐ ๊ฒฝ์šฐ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธธ ์›ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์„ ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

let a = { thisisa: 23 };
let b = { 
  string: 'hi',
  string2: 'hello',
  arr:[{name: "bang", {name: "kim"}],
  number: a
};

a.ref = b;
console.log( Json.stringify(b, ['string', 'arr']) );
// {"string":"hi","arr":[{},{}]}

console.log( JSON.stringify(b, ['string', 'string2', 'arr', 'number', 'name']);
/*
{
  "string":"hi",
  "string2":"hello",
  "arr":[{"name":"bang"},{"name":"kim"}],
  "number":{"thisisa":23}
}
*/

console.log( JSON.stringify(b, function replacer(key, value) {
  console.log(`${key}: ${value}` );
  return (key == 'ref') ? undefined : value;
}));

/* replacer ํ•จ์ˆ˜์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” key:value ์Œ ๋ชฉ๋ก์„ ์ถœ๋ ฅ
:  [object Object]
string:  hi
string2: hello
arr: [object Object], [object Object]
0: [object Object]
name: bang
1: [object Object]
name: kim
number: [object Object]
thisisa: 23
*/

๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ๋ฌผ์—์„œ : [object Object]๊ฐ€ ๋œจ๋Š” ์ด์œ ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ตœ์ดˆ ํ˜ธ์ถœ๋  ๋•Œ {"":b} ํ˜•ํƒœ์˜ ๋ž˜ํผ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์œ„์—์„œ replacer ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ฒ˜์Œ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” (key, value) ์Œ์—์„œ key(๋นˆ ๋ฌธ์ž์—ด) : value(๋ฐ˜ํ™˜ํ•˜๋ ค๋Š” ๊ฐ์ฒด b)๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 


3. JSON.parse

JSON.parse๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JSON์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋””์ฝ”๋”ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. JSON.parse ๋ฌธ๋ฒ•

let value = JSON.parse(str, [reviver]);

 

  • str : JSON ํ˜•์‹์˜ ๋ฌธ์ž์—ด
  • reviver : ๋ชจ๋“  (key, value) ์Œ์„ ๋Œ€์ƒ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” function(key, value) ํ˜•ํƒœ์˜ ํ•จ์ˆ˜๋กœ, ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ
// ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ ๋ฐฐ์—ด
let numbers = "[0, 1, 2, 3]";

numbers = JSON.parse(numbers);

console.log( numbers[1] );	// 1

 

์ค‘์ฒฉ ๊ฐ์ฒด์— ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

let userData = '{ "name": "John", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }';

let user = JSON.parse(userData);

alert( user.friends[1] ); // 1

 

โœ… ๋‘๋ฒˆ์งธ ์ธ์ˆ˜ reviver ์‚ฌ์šฉ ์˜ˆ์‹œ

์ „์†ก๋ฐ›์€ ๊ฐ์ฒด ๋ฌธ์ž์—ด์„ JSON.parse๋กœ ๊ฐ์ฒด๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•  ๋•Œ,

๊ทธ๋ƒฅ JSON.parse(str)๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';

let meetup = JSON.parse(str);

alert( meetup.date.getDate() );

 

 

meetup.date์˜ ๊ฐ’์€ ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';

let meetup = JSON.parse(str, function(key, value) {
  if (key == 'date') return new Date(value);
  return value;
});

alert( meetup.date.getDate() );


// ์ค‘์ฒฉ ๊ฐ์ฒด ์ ์šฉ
let schedule = `{
  "meetups": [
    {"title":"Conference","date":"2017-11-30T12:00:00.000Z"},
    {"title":"Birthday","date":"2017-04-18T12:00:00.000Z"}
  ]
}`;

schedule = JSON.parse(schedule, function(key, value) {
  if (key == 'date') return new Date(value);
  return value;
});

alert( schedule.meetups[1].date.getDate() );

 

 

 

 

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•