Frontend Programming/Javascript

JSON

yoonstar* 2021. 2. 12. 13:23

JSON ( JavaScript Object Notation )

  • 데이터를 저장하거나 전송할때 많이 사용되는 경량의 data 교환 형식
  • JSON 은 데이터 포맷일 뿐이며, 어떠한 통신 방법도, 프로그래밍 문법도 아닌 ❗ 단순히 데이터를 표시하는 표현 방법일 뿐
  • Object 와 유사하게 {key : value}로 이루어진 간단한 파일 포맷
  • 자바스크립트를 이용하여 JSON 형식의 문서를 쉽게 자바스크립트 객체로 변환할 수 있음
  • 프로그래밍 언어와 플랫폼에 상관없이 독립적으로 사용가능
  • 자바스크립트 문법과 굉장히 유사하지만 텍스트 형식일 뿐

 

JSON 문법

자바스크립트의 객체와 마찬가지로 key, value 존재할 수 있음

key 값이나 문자열은 항상 쌍따옴표

{
  "students" : [
   {
     "name" : "Alice",
     "major" : "Math"
   },
   {
	 "name" : "Julie",
	 "major" : "Physics"
   },
  ]
}

 

JSON ↔ Javascript Object 변환

JSON.parse : JSON 형식의 텍스트를 자바스크립트 객체로 변환

JSON.stringify : 자바스크립트 객체를 JSON 형식의 텍스트로 변환

 

1. Object → String (JSON) : serialize 직렬화

//Object to JSON
let json = JSON.stringify(true);
console.log(json); //출력결과 : true 

json=JSON.stringify(['apple','banana']);
console.log(json); //출력결과 : ["apple", "banana"] 
 
const rabbit = {
    name: 'anna',
    color: 'white',
    size: null,
    birthDate: new Date(),
    jump: function () {
      console.log(`${this.name} can jump!`);
    }, //함수는 json에 포함되지 않음
  }; 

  json=JSON.stringify(rabbit);
  console.log(json); //출력결과 : ["apple", "banana"]

  json=JSON.stringify(rabbit, ['name', 'color']); //원하는 property만 json으로 변환가능
  console.log(json); //출력결과 : {"name":"anna","color":"white","size":null,"birthDate":"2021-01-10T13:46:16.289Z"}

  json=JSON.stringify(rabbit, (key, value)=>{
      console.log(`key: ${key}, value: ${value}`);
      return value;
  }) 
  //출력결과: 
  /*
    key: , value: [object Object]
    key: name, value: anna
    key: color, value: white
    key: size, value: null
    key: birthDate, value: 2021-01-10T13:46:16.289Z
    key: jump, value: function () {
      console.log(`${this.name} can jump!`);
    }
   */

 

 

2. String (JSON) → Object : deserialize

//JSON to Object
   json=JSON.stringify(rabbit);
   const obj=JSON.parse(json, (key, value)=>{
    console.log(`key: ${key}, value: ${value}`);
    return value;
   });
   console.log(obj);
   rabbit.jump();
   obj.jump(); //serialize 될때 함수는 포함안됐으므로 
							 //다시 json으로부터 만든 obj에서 함수호출 불가능

   console.log(rabbit.birthDate.getDate());
   console.log(obj.birthDate); //obj의 birthDate는 이미 string형태임
json=JSON.stringify(rabbit);
   const obj=JSON.parse(json, (key, value)=>{
    console.log(`key: ${key}, value: ${value}`);
    return key === 'birthDate' ? new Date(value) : value;
   });
   console.log(obj);
   console.log(rabbit.birthDate.getDate());
   console.log(obj.birthDate.getDate()); // (o)

 

📌 참고 링크

[Nomad - javascript for beginners] 강의

[surim014.log]

 

'Frontend Programming > Javascript' 카테고리의 다른 글

안티패턴  (0) 2021.03.02
자바스크립트 비동기 처리  (0) 2021.02.18
sort 함수  (0) 2021.02.12
random으로 값 가져오기  (0) 2021.02.11
classList  (0) 2021.02.07