[Java] jackson의 ObjectMapper를 활용한 json to map, map to json 변환하기

뉴브이·2023년 6월 2일

jackson라이브러리의 ObjectMapper를 활용해서 json to Map(또는 VO), Map(또는 VO) to json으로 변환하는 방법을 소개한다.

먼저 jackson 라이브러리의 의존성을 추가한다.

implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.15.0'

https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.15.0 참고!

다음과 같은 json을 'jsonStr'이라는 String변수에 담았다고 가정할때.

{
  "id":961113,
  "name":"뉴브이",
  "job":"backend developer",
  "skill" : ["java", "spring", "sql"]
}

다음과 같이 ObjectMapper객체를 준비하고..

ObjectMapper objectMapper = new ObjectMapper();

spring을 사용한다면 빈등록 및 멤버필드 또는 생성자 주입하는 것을 추천!

  • Json to Map으로 변환하기.
Map<String, String> profileMap = objectMapper.readValue(jsonStr, Map.class);
// {id=961113, name=뉴브이, job=backend developer, skill=[java, spring, sql]}
  • Map to Json으로 변환하기.
String newJsonStr = objectMapper.writeValueAsString(profileMap);
// {"id":961113,"name":"뉴브이","job":"backend developer","skill":["java","spring","sql"]}

참쉽죠? 추가적으로 개행된 json문자열로 변환하고 싶다면...

  • json으로 변환시 예쁘게 개행된 문자열 받기.
String prettyJsonStr = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(profileMap);
/**
{
  "id" : 961113,
  "name" : "뉴브이",
  "job" : "backend developer",
  "skill" : [ "java", "spring", "sql" ]
}
*/

디버그용도로 로그찍을때 사용하면 좋을거 같다.

그리고 json으로 변환하기위한 메서드 사용시 JsonMappingException, JsonProcessingException 와 같은 예외는 깔끔하게 다뤄주자. (던지거나 캐치하거나)

만약 본인이 개발하는 프로젝트에서 Map사용을 지양한다면 VO객체로도 얼마든지 json으로 변환하거나 json을 VO객체로 만들수 있다.

예를들어.. 다음과 같은 VO클래스가 있다면...

@Getter
@Setter
@ToString
public class ProfileVO {

	private int id;

	private String name;

	private String job;

	private String[] skill;

}
  • Json to VO으로 변환하기.
ProfileVO profileVO = objectMapper.readValue(jsonStr, ProfileVO.class);
// ProfileVO(id=961113, name=뉴브이, job=backend developer, skill=[java, spring, sql])
  • VO to Json으로 변환하기.
String newJsonStr = objectMapper.writeValueAsString(profileVO);
// {"id":961113,"name":"뉴브이","job":"backend developer","skill":["java","spring","sql"]}

참고로 ObjectMapper의 기본설정으로는 모든 json 데이터의 키가 VO객체의 멤버필드에 존재해야하며 관련한 별개의 설정은 추후 포스팅에 소개하겠다.

마지막으로 성능상으로 jackson이 gson이나 json-simple보다 뛰어나다고 하니... jackson 적극추천하는 바이다.

profile
new vision and new value

0개의 댓글