ABOUT ME

-

오늘 방문자
-
어제 방문자
-
전체
-
  • [JAVA] JSON 다루기 정리 (JACKSON - ObjectMapper)
    JAVA 2018. 11. 25. 23:22

    API를 개발하다보면 JSON을 많이 다루게되어 한번 정리한다.


    JAVA에서 JSON을 다룰때 주로 사용하는 클래스는


    주로 GSONJACKSON일 것이다.


     

     GSON

    JACKSON 

     

     구글에서 제공한 JSON 자바 라이브러리

    JSON 자바 라이브러리 

     성능
    (루프안에서 JSON인스턴스 생성시)

    우수

     10만번 부터 차이가 눈에 띄게 벌어지고
    100만 부터 매우매우 벌어짐 



     성능
    (JSON객체 한번만 생성해서 사용 할 경우)

     

    우수
    10만번 부터 차이가 눈에 띄게 벌어지고

    100만번 부터 매우매우 벌어짐

     기타

     

    spring boot에서 기본으로 포함됨
    @Bean에 ObjectMapper등록해 놓고 싱글톤으로 주입 받아서 쓰기 때문에 성능도 우수 



    위와 같은 이유로 주로 나는 JACKSON을 많이 사용한다.

    (회사에서도 결제일마감 데이터의 경우 하루에만 40만건 이상씩 insert되고 있다, 심지어 이벤트가 있을 경우는 80만건 이상도 데이터가 생기기도 한다 )


    라이브러리별  성능 비교 참고 

    요약 : 적은 데이터에서는 GSON이 성능 우수, 대량데이터에서는 JACKSON이 우수

     http://www.yunsobi.com/blog/entry/java-json-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EB%B3%84-parser-%EC%86%8D%EB%8F%84-%EB%B9%84%EA%B5%90


    https://djkeh.github.io/articles/The-fastest-way-to-parse-json-data-to-java-kor/




    그리고 실제로 JSON라이브러리 인스턴스를 여러번 생성하여 작업하는 경우가 드문것 같다.(사실상 거의 없었음.)


    아래 예제는 JACKSON의 ObjectMapper 인스턴스를 하나 생성해서 사용하였다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package 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 END
    cs


    댓글

Designed by Tistory.