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

뉴브이·2023년 6월 2일
1
post-custom-banner

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
post-custom-banner

0개의 댓글