250x250
Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

진스

9. JSON 본문

JavaScript

9. JSON

입방정 2021. 4. 9. 17:47
728x90

HTTP (HyperText Transfer Protocol)

  • 하이퍼텍스트 전송 프로토콜
  • 하이퍼텍스트는 웹사이트에서 이용되어지는 Rink들만 얘기하는 것이 아니라 모든 리소스(문서, 이미지 파일 등)를 포함한다
  • 브라우저 위에서 동작하고 있는 웹사이트나 웹APP 같은 Client들이 어떻게 Server와 통신할수 있는지를 정의 한 것을 HTTP라 한다
  • HTTP를 이용해서 Sever에서 Data를 요청해서 받아올 수 있는 방법으로는 AJAX라는 것이 있다.

 

AJAX (Asynchronous Javascript And XML)

  • 비동기 Javascript, XML
  • 웹페이지에서 동적으로 Sever에게 Data를 주고 받을 수 있는 기술을 의미
  • 대표적인 브라우저 API로는 XMLHttpRequest, fetch 가 존재함
  • AJAX로 Data를 주고 받을 때의 포맷으로 JSON을 많이 사용함

 

JSON (JavaScript Object Notation)

  • Javascript 객체 표기법 (Object {key:value})
  • 가장 간단한 데이터 교환 형식
  • 가벼운 텍스트 기반 구조
  • 읽기 쉬움
  • key-value 의 쌍으로 이루어져 있음
  • 네트워크 연결 간 데이터 직렬화(serialize) 및 전송에 사용
  • 독립적 인 프로그래밍 언어 및 플랫폼 (=프로그래밍 언어나 플랫폼에 상관 없이 쓸 수 있음)
  • 거의 모든 언어가 JSON → Object(해당 언어의 문법에 맞춰서..), Object → JSON 으로 변환하는 것을 지원함
  • 아래 2개의 그림만 이해하면 됨

1. Object to(→) JSON

  • JSON.stringify()
const rabbit = {
  name: `tori`,
  color:`white`,
  size: null,
  birthDate: new Date(),
  // symbol: Symbol(`id`), // JS에만 존재하는 data라서 serialize 되지 않는다
  // 객체 내부에 화살표 함수를 정의하면 this는 전역객체를 가리킴(window)
  // 아래의 함수 문법은 jump: function()과 같음
  jump() { // 함수는 object의 data가 아니기 때문에 serialize 되지 않는다
    console.log(`${this.name} can jump!`);
  }
};
let json = JSON.stringify(true); // 불린값
console.log(json);

json = JSON.stringify([`apple`, `banana`]); // 배열
console.log(json);

json = JSON.stringify(rabbit); // 객체
console.log(json);

json = JSON.stringify(rabbit, [`name`, `color`]); // 원하는 key의 값만 serialize 할 수 있음
console.log(json);

json = JSON.stringify(rabbit, (key, value) => { // 콜백함수 방법
  // console.log(`key: ${key}, value: ${value}`);
  // if (key === `name` ) {
  //   return `ellie`;
  // } else {
  //   return value
  // }
  return key === `name` ? `ellie` : value;
});
console.log(json);

2. JSON to(→) Object

  • JSON.parse()
json = JSON.stringify(rabbit);
console.log(json);

// 여기서 부터 보샘
let obj = JSON.parse(json);
console.log(obj);
// obj.jump(); // > error : stringify 할 때, 함수는 serializee 되지 않아서 jump는 존재하지 메서드임
// console.log(rabbit.birthDate.getDate()); // > 날짜 '일' 이 출력됨
// console.log(obj.birthDate.getDate()); // > error : serializee된 birthDate는 string 이기 때문에 당연히 getDate API가 호출 안됨

obj = JSON.parse(json, (key, value) => {
  // console.log(`key: ${key}, value: ${value}`);
  return key === `birthDate` ? new Date(value) : value;
});
console.log(obj);
console.log(obj.birthDate.getDate()); // > 날짜 '일' 이 출력됨 : 위에 콜백함수로 string을 JS의 API로 수정해서 deserialize 했기 때문에 잘 동작함
728x90

'JavaScript' 카테고리의 다른 글

11. Promise  (0) 2021.04.09
10. Callback 지옥  (0) 2021.04.09
8. Array(2) (퀴즈문제)  (0) 2021.04.09
7. Array(1)  (0) 2021.04.09
6. Object (객체)  (0) 2021.04.09
Comments