-
[JAVA] JSON 다루기 정리 (JACKSON - ObjectMapper)JAVA 2018. 11. 25. 23:22
API를 개발하다보면 JSON을 많이 다루게되어 한번 정리한다.
JAVA에서 JSON을 다룰때 주로 사용하는 클래스는
주로 GSON과 JACKSON일 것이다.
GSON
JACKSON
구글에서 제공한 JSON 자바 라이브러리
JSON 자바 라이브러리
성능
(루프안에서 JSON인스턴스 생성시)우수
10만번 부터 차이가 눈에 띄게 벌어지고
100만 부터 매우매우 벌어짐성능
(JSON객체 한번만 생성해서 사용 할 경우)우수
10만번 부터 차이가 눈에 띄게 벌어지고100만번 부터 매우매우 벌어짐
기타
spring boot에서 기본으로 포함됨
@Bean에 ObjectMapper등록해 놓고 싱글톤으로 주입 받아서 쓰기 때문에 성능도 우수위와 같은 이유로 주로 나는 JACKSON을 많이 사용한다.
(회사에서도 결제일마감 데이터의 경우 하루에만 40만건 이상씩 insert되고 있다, 심지어 이벤트가 있을 경우는 80만건 이상도 데이터가 생기기도 한다 )
라이브러리별 성능 비교 참고
요약 : 적은 데이터에서는 GSON이 성능 우수, 대량데이터에서는 JACKSON이 우수
https://djkeh.github.io/articles/The-fastest-way-to-parse-json-data-to-java-kor/
그리고 실제로 JSON라이브러리 인스턴스를 여러번 생성하여 작업하는 경우가 드문것 같다.(사실상 거의 없었음.)
아래 예제는 JACKSON의 ObjectMapper 인스턴스를 하나 생성해서 사용하였다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374package test_java;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.ObjectMapper;public class Main{public static void main(String[] args) throws IOException{ObjectMapper obm = new ObjectMapper();/** Json문자열 -> Map */String jsonStr = "{ \"name\" : \"민\" , \"age\" : 28 }";Map<String, Object > map = new HashMap<String, Object>();map = obm.readValue(jsonStr, new TypeReference<Map<String, Object>>() {});//System.out.println("jsonString -> map : " + map);/**Map -> Json문자열 */Map<String ,Object> map2 = new HashMap<String, Object>();map2.put("name", "미니미니");map2.put("age", 100 );String jsonStr2 = obm.writerWithDefaultPrettyPrinter().writeValueAsString(map2);//System.out.println("map -> jsonString : " + jsonStr2);/** json문자열 -> javaObject */User user = obm.readValue(jsonStr, User.class);/**javaObject -> json문자열 */User user1 = new User();user1.setName("식빵");user1.setAge(3);String user1Str = obm.writeValueAsString(user1);//System.out.println(user1Str);/**List<Object> -> Json문자열 */List<User> userList = new ArrayList<User>();User u1 = new User();u1.setName("dodo");u1.setAge(38);userList.add(u1);User u2 = new User();u2.setName("동길");u2.setAge(20);userList.add(u2);User u3 = new User();u3.setName("통통");u3.setAge(10);userList.add(u3);String userListStr = obm.writeValueAsString(userList);System.out.println(userListStr);/** JsonList문자열 -> List<Object> */List<User> userList2 = obm.readValue(userListStr, new TypeReference<List<User>>(){});}}//CLASS ENDcs 'JAVA' 카테고리의 다른 글
[JAVA] String StringBuffer StringBuilder (0) 2019.08.26 [JAVA] IntelliJ에서 Stream 디버깅하기 (0) 2019.03.30 [JAVA] 함수형 인터페이스 Predicate (0) 2018.11.12 [JAVA] 람다식과 함수형 인터페이스 (0) 2018.11.11 [JAVA] 람다식이란? 그리고 사용법! (0) 2018.11.11