Web/Java

JSON ,ObjectMapper, 직렬화(serialization)역직렬화(deserialization), transferable condition

TLdkt 2022. 7. 23. 01:07
728x90
반응형

💡 학습 목표

  • Java에서 제공하는 데이터 타입을 JSON으로 변경하는 기능을 구현
  • Json이 무엇인지 안다
  • ‘전송가능한 조건’이 무엇인지 안다
  • 자바스크립트 객체와 JSON의 차이를 안다 </aside>

JSON이란

JavaScript Object Notation

데이터 교환을 위해 만들어진 객체 형태 포맷

객체 내용이 메시지라면, 어떻게 전송할 수 있을까?

전송가능한 조건?(transferable condition)

  • 같은 프로그램을 발/수신자가 사용
  • 범용적으로 읽을 수 있는 형태(ex;문자열)
ap<String, String> message = new HashMap<>(){{
      put("sender", "김코딩");
      put("receiver", "박해커");
      put("message", "밥먹을래?");
      put("createdAt", "2021-01-12,10:10:10");
    }};

Hashmap message에 넣은 위와 같은 데이터는 형변환한다고 객체 내용을 포함하는 게 아님

ex: message.toString() 한다고 해서 java외 다른 프로그램에서도 읽을 수 있게 되는 게 아님

→객체를 JSON형태로 변환 or JSON을 객체 형태로 변환해야 함

우선 JSON형태로 변경해보자

ObjectMapper 클래스로 JSON만들기

ObjectMapper mapper = new ObjectMapper();
String json = mapper. writeValueAsSting(message);
sout(json);
/*결과
{"createdAt":"2021-01-12,10:10:10","receiver":"박해커","sender":"김코딩","message":"밥먹을래?"}
*/

직렬화(serialize)

writeValueAsSting(message); = 문자열의 JSON형태로 만들기

JSON은 문자열로 변환된 것

수신자는 어떻게 다시 객체의 형태로 만들까?

역직렬화(deserialization)

ObjectMapper mapper new ObjectMapper();
String json = "{\\"createdAt\\":\\"2021-01-12,10:10:10\\",\\"receiver\\":\\"박해커\\",\\"sender\\":\\"김코딩\\",\\"message\\":\\"밥먹을래?\\"}";
Map<String, String> deserializedData = mapper.readValue(json, Map.class);
sout(deserializedData);

/*
객체 형태의 결과 반환
{createdAt=2021-01-12,10:10:10, receiver=박해커, sender=김코딩, message=밥먹을래?}
*/

JSON의 기본 규칙

자바스크립트 객체와 다른 규칙

JSON 공식 문서

JSON

key String value

자바스크립트 객체 따옴표 없이 따옴표 상관X
JSON 반드시 큰따옴표 반드시 큰따옴표

key:✔️value, ✔️key:value 띄어쓰기 절대안됨

728x90
반응형