1. GSON
GSON는 json 형태를 자바 객체로 변환하는데 사용할 수 있도록 구글에서 제공한 자바 라이브러리 입니다.
현재 Google Gson Version 2.2.4 버전을 다운로드 받으실 수 있습니다.
기본적으로 주로 Gson 클래스를 사용하고, new Gson() 으로 객체를 생성할 수 있습니다. 다양한 설정을 위해서 GsonBuilder 클래스를 사용합니다.
– json string -> java object
아래와 같은 형태의 json string을 java 객체에 매핑하는 방법입니다. gson 객체의 fromJson() 메서드를 사용하여 쉽게 매핑할 수 있습니다.
{ “name”:”홍길동”, “age”:”25″, “favoriteFood”:[“김치볶음밥”, “부대찌개”, “비빔밥”], “etc”:{“email”:”abc@naver.com“, “address”:”xxx”} }
– java object -> json string
아래의 예제는 Map 객체를 json 형태로 변환하는 소스입니다. 위의 소스와 마찬가지로 gson 객체를 생성 후 toJson() 메서드를 사용하여 Map객체를 json 형태로 변환하였습니다.
2. JACKSON
Jackson 또한 GSON과 마찬가지로 json 형태를 자바 객체로, 자바 객체를 json 형태로 변환해주는 자바 라이브러리 입니다.
현재 latest version is 2.2.3 버전을 다운로드 받으실 수 있습니다.
Jackson은 다음과 같이 JSON을 처리하는 위한 3가지 방법을 제공합니다.
– Streaming API : 성능이 중요할 때 사용.
– Data Binding : 편리한 사용을 원할 때 사용.
– Tree Model : XML처럼 노드형태로 Json 데이터를 다룸. 유연성이 필요할 때 사용.
Streaming API만을 사용한다면 core 라이브러리만으로도 가능하고, Data Binding을 사용한다면 mapper 라이브러리도 필요합니다.
자바 객체와 같은 구조를 갖는 JSON 간에 상호 변환하는 기능을 제공하는 ObjectMapper 클래스를 사용합니다.
– json string -> java object
{ “name”:”홍길동”, “age”:”25″, “favoriteFood”:[“김치볶음밥”, “부대찌개”, “비빔밥”], “etc”:{“email”:”abc@naver.com“, “address”:”xxx”} }
GSON 예제에서 사용한 같은 형태의 json string 입니다. ObjectMapper 객체를 생성 후 readValue() 메서드를 사용하여 자바 객체로 변환합니다.
– java object -> json string
Jackson 은 null 데이터가 있을 경우 문자열로 간주하고 변환을 하는데요. (GSON은 null 데이터 변환하지 않음)
map 객체가 null인 데이터를 json string으로 변환시 아래의 메서드를 사용하여 제외시키기 설정도 가능합니다.
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); mapper.disable(SerializationFeature.WRITE_NULL_MAP_VALUES); |
두 라이브러리 사용 시 DateTime의 차이점이 있는데,
GSON의 경우 Date 기본 표현으로 Mar 31, 2014 10:54:22 AM 와 같은 형태로 나타나고, Jackson의 경우 Date 기본 표현으로 1396267362196 UTC 기준으로 표현됩니다.
사용하실 때 참고하시면 좋겠습니다. GSON은 GsonBuilder 클래스를 사용하여 원하는 형태로 Date 형태를 변환하실 수 있습니다.
3. GSON vs JACKSON 성능 비교
두 라이브러리에 대해 조사해 보면서 Gson과 Jackson의 성능을 비교하는 글들도 많이 보았는데요.
http://devcafe.nhncorp.com/nts_bp/board_2/1962393 – [공유] Jackson vs Gson
http://devcafe.nhncorp.com/srequest/339076 – JSON <-> Java 변환 라이브러리에 대한 거버넌스 결과
http://blaazinsoftwaretech.blogspot.kr/2013/08/jackson-2-vs-gson-performance-comparison.html?m=1 – Jackson 2 VS GSON Performance Comparison
마지막 주소에 있는 내용입니다.
간단한 객체를 가지고 각각의 JSON 라이브러리를 사용하여 json string 으로 변환하는 테스트 입니다.
아래 그래프의 경우 루프가 반복될 때마다 각각의 JSON 라이브러리의 인스턴스를 생성하였을때의 결과입니다.
Jackson에 비해 GSON의 성능이 월등하게 높아보입니다.
하지만 반대로 객체를 한번만 생성하여 사용하게 될 경우, Jackson이 GSON보다 좋은 성능을 나타내고 있습니다.
ObjectMapper 객체의 생성시간이 250ms 정도 걸리는데, ObjectMapper 의 생성비용을 제외한다면 Jackson이 대체적으로 성능이 우수하다고 합니다.