JAVA

JSON 직렬화, 역직렬화 Convert Java Object to JSON

min민 2023. 1. 13.

제목 : Convert Java Object to JSON // 직렬화, 역질렬화.

 

JSON은 JavaScript Object Notation의 줄임말로,

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

 

 

 

메세지를 주고 받을때 발신자와 수신자가 같은 프로그램을 사용하거나,

문자열처럼 범용적으로 읽을 수 있어야 하는데

이 때에 Java로 코드를 작성할 때에 다른 프로그램에서는 데이터를 정확하게 파악할 수 없게 된다.

 

 

 

이 문제를 해결하기 위해 객체를 JSON 형태로 변환하거나 JSON을 객체의 형태로 변환하는 방법이다.

 

 

 

 

 

 

Java객체를 JSON 객체로 변환하기 위해서는 다음 두 가지 방법이 있다. 

 

 

1. GSON 라이브러리 사용

2. 잭슨 API 사용.

 

GSON 라이브러리는 Java 객체를 JSON으로 변환하는데 중요한 역할을 한다. GSON라이브러리는 Java 객체를 JSON으로 변환할 뿐만 아니라 이를 사용하여 JSON 문자열을 동등한 Java 객체로 변환한다.

 

가볍게 알아보면

Java 개체를 JSON으로 변환할때

1. 메이븐 프로젝트를 생성하고, (IDE 사용 추천)

2. xml 파일에 GSON 종속성을 추가한다. (GSON 라이브러리 사용을위해 pom.xml파일에 GSON 종속성을 추가해야함.)

3. JSON으로 변환할 Plain Old Java Object를 생성한다. (JSON 객체로 변환하려는 POJO를 생성해야 한다.)

4. Java 개체를 JSON으로 변환하는 Java 클래스를 만든다. 

 

 

 

 

 

와 같은 과정을 사용하기도 하지만 더욱쉽게

 

 

 

 

2. 잭슨 라이브러리를 사용할 수도 있다.

 

오늘은 이 것을 알아보도록 하자!. ↓

 

Jackson API 의 ObjectMapper 클래스는 Java 객체를 JSON 형식 또는 객체로 변환하는 메서드를 제공한다.

ObjectMapper 클래스 writeValueAsString() 메서드는 JSON 개체를 매게 변수로 사용하고 JSON 문자열을 반환하게 된다.

 

 

 

 

Jackson API를 활용해서 Java 객체를 JSON 객체로 변환하는 방법은 아래와 같다.

 

 

1. 메이븐 프로젝트 만들기

2. xml 파일에 Jackson 종속성을 추가한 후

3. POJO 객체를 생성한 후

4. Java 객체를 JSON 개체로 변환하는 새 클래스를 만들면 된다.

 

 

 

 

 

 

 

쉽게 사용하고 싶다면 사용하는 IDE에 

ObjectMapper mapper = new ObjectMapper();
String Json = mapper.writeValueAsString();

System.out.println(Json);

아래와 같이 ObjectMapper 생성자를 만들어주고, writeValueAsString(); 매서드를 사용하면 

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

아래와 같은 코드를 자동으로 import 할 수 있다 (인텔리제이 기준)

이렇게 import를 진행하면, 위의 1,2,3번은 자동으로 진행 됐다라고 봐도 무방하다.

 

 

 

 

 

 

writeValueAsString(); 매서드를 사용하는 이 과정을 직렬화 (serialize)라고 한다.

 

 

 

 

이미지로 쉽게 표현하면

 

이와 같이 표현된다.

 

 

 

이렇게 하면 JOSN으로 변환된 객체의 타입은 문자열이 된다.

발신자가 객체를 직렬화한 문자열(writeValueAsString(); 매서드를 사용 한 후에 문자열)을 보내게 된다면,

누군가는 객체의 내용을 보낼 수 있게 된다.

 

쉽게 정리하면 : 누군가 내 코드를 이제 직관적으로 읽기 쉬워진 것이다.

 

 

 

 

 

 

그러면 수신자는 이 문자열을 다시 객체의 형태로 바꿀 수도 있는데 이것이 위에 이미지에 보이는 

Deserialize 역직렬화 라고 한다. 

 

 

 

 

예시 코드는 아래와 같이 작성해 봤다.

 

  ObjectMapper mapper = new ObjectMapper();
  String Json = {\"hi_min\":\"2023-01-13,22:51:10\",\"receiver\":\"mins\",\"sender\":\"chuseok\",\"message\":\"멍멍_밥더주세용(?)\"}";
  
  Map<String, String> deserializedData = mapper.readValue(json, Map.class);  // .readValue 사용.
  System.out.println(deserializedData);
  
  /* 
  hi_min=2023-01-13,22:51:10, receiver=mins, sender=chuseok, message=멍멍_밥더주세용(?)} 
  */

 

.readValue를 사용하게되면 역 직렬화가 되어 다시 객체형태로 변경되게 된다

 

 

.readValue() 매서드 사용법은 :    .readValue(사용할 변수명, 변수가 속한클래스(.class 와 같이 표현)) ;

할 수 있다.

 

 

 

 

 

 

JSON은 결과적으로 서로 다른 프로그램 사이에서 데이터를 교환하기 위한 포맷이다.

그리고

JSON포맷은 자바스크립트를 포함해 많은 언어에서

범용적으로 사용하는 포맷이기에 꼭 알고넘어가야 하기도 하다.

 

 

 

 

 

JSON의 직렬화(serialize) 과정을 담은 메소드 writeValueAsString(); 를 풀어서

재귀적으로 JSON을 구현할 수도 있다. (하드코딩 ㄱㄱ링~♥)

 

이 내용은 아래 링크를 참고하면 좋을것 같다↓

 

 

 

 

 

 

 

JSON과 자바스크립트 객체의 차이점

 

자바스크립트 객체 (키값) : 키는 따옴표 없이 쓸 수 있음.

JSON                     (키값) : 반드시  쌍 따옴표를 붙여야 한다.

 

자바스크립트 객체 (문자열 값) : 문자열 값은 어떠한 형태의 따옴표도 사용 가능하다.

JSON                     (문자열 값) : 반드시 쌍 따옴표로 작성해야 한다.

 

JSON : 키와 값 사이, 그리고 키-값 쌍 사이에는 공백이 있어서는 안 된다.

참고하면 좋은 자료 : json.org/json-en.html

 

 

 

 

 

 

 

 

공부하면서 느낀점:

나중에 회사에서 엔지니어들과 협업을 할 때에 JSON 직렬화, 역직렬화를 통해 코드를 주고 받을 수 있다는 점을 상기하면서 기본적인 사항이기에 잘 짚고 넘어가야겠다.

 

**오늘도 새로운거 하나 배워갑니다# 헿 <

 

 

 

 

 

 

 

알찬↓

그래프 정리도 보고가세요!

https://mininkorea.tistory.com/32

 

Grahp란? [자료구조 그래프] 개념 및 특징 종류 구조 // 인접 리스트와 인접행렬 선택 방법

Graph 정의 프로그래밍에서의 그래프는 여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조 입니다. 단순히 노드와 그 노드를 연결하는 간선을 하라노 모아 놓은 자료구조라

mininkorea.tistory.com

 

 

 

 

 

 

 

 

이미지 링크

https://www.javatpoint.com/convert-java-object-to-json

https://velog.io/@sileeee/JUnit%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%8B%A4%ED%96%89%EC%A4%91-%EB%A7%88%EC%A3%BC%EC%B9%9C-%EC%98%A4%EB%A5%98

댓글