2 minute read


๐Ÿ‘‰ JSON.stringify()

โ–ถ๏ธ JSON.stringify() ๋ž€?

JavaScript ๊ฐ’, ๊ฐ์ฒด โ†’ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

JSON์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ์›น ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์›น ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ, JSON.stringify()๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

JSON.stringify({ x: 5, y: 6 }); // '{"X":5,"y":6}'
JSON.stringify([3, "false", false]); // '[3,"false",false]'
JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)); // '"2006-01-02T06:04:05.000Z"'


โ–ถ๏ธ ๊ทœ์น™

  • ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฐ์ฒด์˜ ์†์„ฑ๋“ค์€ ์–ด๋–ค ํŠน์ •ํ•œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฌธ์ž์—ดํ™” ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ™์€ ๊ฐ์ฒด์˜ ๋ฌธ์ž์—ดํ™”์— ์žˆ์–ด์„œ ์†์„ฑ์˜ ์ˆœ์„œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Boolean, Number, String ๊ฐ์ฒด๋“ค์€ ๋ฌธ์ž์—ดํ™” ๋  ๋•Œ ์ „ํ†ต์ ์ธ ๋ณ€ํ™˜ ์˜๋ฏธ์— ๋”ฐ๋ผ ์—ฐ๊ด€๋œ ๊ธฐ๋ณธํ˜•(primitive) ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
  • undefined, ํ•จ์ˆ˜, ์‹ฌ๋ณผ(symbol)์€ ๋ณ€ํ™˜๋  ๋•Œ ์ƒ๋žต๋˜๊ฑฐ๋‚˜(๊ฐ์ฒด ์•ˆ์— ์žˆ์„ ๊ฒฝ์šฐ), null๋กœ ๋ณ€ํ™˜๋œ๋‹ค(๋ฐฐ์—ด ์•ˆ์— ์žˆ์„ ๊ฒฝ์šฐ)
  • ์‹ฌ๋ณผ์„ ํ‚ค๋กœ ๊ฐ€์ง€๋Š” ์†์„ฑ๋“ค์€ replacer ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์™„์ „ํžˆ ๋ฌด์‹œ๋œ๋‹ค.
  • ์—ด๊ฑฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ์†์„ฑ๋“ค์€ ๋ฌด์‹œ๋œ๋‹ค.
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'

JSON.stringify(new Date(2006, 0, 2, 15, 4, 5));
// '"2006-01-02T15:04:05.000Z"'

JSON.stringify({ x: 5, y: 6 });
// '{"x":5,"y":6}' or '{"y":6,"x":5}'
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'

// Symbols:
JSON.stringify({ x: undefined, y: Object, z: Symbol("") });
// '{}'
JSON.stringify({ [Symbol("foo")]: "foo" });
// '{}'
JSON.stringify({ [Symbol.for("foo")]: "foo" }, [Symbol.for("foo")]);
// '{}'
JSON.stringify({ [Symbol.for("foo")]: "foo" }, function (k, v) {
  if (typeof k === "symbol") {
    return "a symbol";
  }
});
// '{}'

// Non-enumerable properties:
JSON.stringify(
  Object.create(null, {
    x: { value: "x", enumerable: false },
    y: { value: "y", enumerable: true },
  })
);
// '{"y":"y"}'


โ–ถ๏ธ ์ง๋ ฌํ™” (serialize)

const message = {
  sender: "๊น€์ฝ”๋”ฉ",
  receiver: "๋ฐ•ํ•ด์ปค",
  message: "ํ•ด์ปค์•ผ ์˜ค๋Š˜ ์ €๋… ๊ฐ™์ด ๋จน์„๋ž˜?",
  createdAt: "2021-01-12 10:10:10",
};
let transferableMessage = JSON.stringify(message);

console.log(transferableMessage);
// '{"sender":"๊น€์ฝ”๋”ฉ","receiver":"๋ฐ•ํ•ด์ปค","message":"ํ•ด์ปค์•ผ ์˜ค๋Š˜ ์ €๋… ๊ฐ™์ด ๋จน์„๋ž˜?","createdAt":"2021-01-12 10:10:10"}'

console.log(typeof transferableMessage);
// 'string'

stringify ํ•˜๋Š” ์ด ๊ณผ์ •์„ ์ง๋ ฌํ™”(serialize)ํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

JSON์œผ๋กœ ๋ณ€ํ™˜๋œ ๊ฐ์ฒด์˜ ํƒ€์ž…์€ ๋ฌธ์ž์—ด์ด๋‹ค. ๋ฐœ์‹ ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™” ํ•œ ๋ฌธ์ž์—ด๋กœ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ˆ˜์‹ ์ž๋Š” ์ด ๋ฌธ์ž์—ด ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ? JSON.stringify()์™€ ์ •๋ฐ˜๋Œ€์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” JSON.parse()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ‘‰ JSON.parse()

JSON ๋ฌธ์ž์—ด โ†’ JavaScript ๊ฐ’, ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜

JSON์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ์›น ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ์›น ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๋ฌธ์ž์—ด์ด๋‹ค. ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ JSON.parse() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด JSON ๋ฌธ์ž์—ด์˜ ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ์—์„œ JavaScript ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

const json = '{"result":true,"count":42}';
const obj = JSON.parse(json);

console.log(obj); // Object { result: true, count: 42}
console.log(obj.count); // 42
console.log(obj.result); // true
JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null

โŒ ํ›„ํ–‰ ์‰ผํ‘œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

JSON.parse("[1, 2, 3, 4, ]"); //SyntaxError
JSON.parse('{"foo" : 1, }'); //SyntaxError


๋ฐ์ดํ„ฐ ์ €์žฅ ์˜ˆ์‹œ

ex: localStorage์— ๋ฐ์ดํ„ฐ ์ €์žฅ

// Storing data:
const myObj = { name: "John", age: 31, city: "New York" };
const myJSON = JSON.stringify(myObj);
localStorage.setItem("testJSON", myJSON);

// Retrieving data:
let text = localStorage.getItem("testJSON");
let obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.name;


Reference

MDN : JSON.stringify, JSON.parse()

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

W3Schools : JSON.stirngify

[JSON] JSON ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๊ฐ„๋‹จ ์ •๋ฆฌ ๋ฐ ์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

Leave a comment