[코드스테이츠 백엔드 44기 SEB BE] 22일차

오태호·2023년 3월 16일
0

코드스테이츠

목록 보기
19/22
post-thumbnail

JSON

JSON의 탄생 배경

  • JSON : JavaScript Object Notation의 줄임말
    • 데이터 교환을 위해 만들어진 객체 형태의 포맷
  • 네트워크를 통해 어떤 객체의 내용을 다른 프로그램에게 전송하다고 생각해보자
    • 전송 가능한 조건
      • 수신자 및 발신자가 같은 프로그램을 사용한다
      • 혹은, 문자열처럼 범용적으로 읽을 수 있는 형태의 데이터가 전송되어야 한다
    • 전송하고자 하는 객체를 String으로 변환할 경우, 객체 내용을 포함하지 않을 수 있다
      • JSON 형식과 다른 형태로 변환되어 다른 프로그램에서는 데이터를 정확하게 파악할 수 없다
  • 위와 같은 문제를 해결하기 위해 JSON을 사용한다
    • 객체를 JSON 형태로 변환하거나 JSON을 객체의 형태로 변환한다
  • 객체를 JSON 형태로 변환할 때는 여러 방법이 존재한다
    • 그 중 jackson 라이브러리에서 제공하는 ObjectMapper 클래스를 사용하여 JSON 형태로 변경하는 예시를 보자
HashMap<String, String> cars = new HashMap<>() {{
    put("아반떼", "현대");
    put("소나타", "현대");
    put("소렌토", "기아");
    put("스팅어", "기아");
}};

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(cars);

System.out.println(json);
// {"아반떼":"현대","소나타":"현대","소렌토":"기아","스팅어":"기아"}

writeValueAsString 하는 과정을 직렬화(serialize) 한다고 한다

  • JSON으로 변환된 객체의 타입은 문자열이다
    • 이를 받아 다시 객체의 형태로 만드는 방법은?
ObjectMapper mapper = new ObjectMapper();
String json = "{\"아반떼\":\"현대\",\"소나타\":\"현대\",\"소렌토\":\"기아\",\"스팅어\":\"기아\"}";

Map<String, String> deserialized = mapper.readValue(json, Map.class);
System.out.println(deserialized);
// {아반떼=현대,소나타=현대,소렌토=기아,스팅어=기아}

readValue를 적용하는 과정을 역직렬화(deserialize)한다고 한다

  • 결국, JSON은 서로 다른 프로그램 사이에 데이터를 교환하기 위한 포맷이다
    • 자바스크립트를 포함한 많은 언어에서 범용적으로 사용하는 포맷

JSON 기본 규칙

  • 자바스크립트의 객체와 JSON은 다른 규칙이 존재한다
자바스크립트 객체JSON
키는 따옴표 없이 쓸 수 있다반드시 쌍따옴표를 붙여야 한다
문자열 값문자열 값은 어떠한 형태의 따옴표도 사용 가능하다반드시 쌍따옴표로 감싸야 한다
  • JSON은 키와 값 사이, 그리고 키-값 쌍 사이에는 공백이 존재해서는 안된다!
profile
자바, 웹 개발을 열심히 공부하고 있습니다!

0개의 댓글