쏘댕

[Java] 자주쓰는 Json <-> Object 파싱 JsonUtil 만들기 본문

공부/Java

[Java] 자주쓰는 Json <-> Object 파싱 JsonUtil 만들기

ssodang 2019. 11. 21. 10:57

 

json 파싱할 일은 수두룩 빽빽인데, 매번 귀찮으니 util로 만들어놓으면 편하다.

몇 번 만들면서 조금씩 변하기는 했는데, 어쨌든 toObject는 필수템!

 

이렇게 쓰니 다른 프로젝트 개발하다 json 유틸없으면

파싱하는 법이 잘 생각 안나서 찾아가면서 만들어야 하는게 함정... ㅋㅋㅋㅋㅋ

 

  package com.ssodang.common.util;

  import com.ssodang.exception.JsonUtilException;
  import com.fasterxml.jackson.databind.JsonNode;
  import com.fasterxml.jackson.databind.ObjectMapper;
  import com.fasterxml.jackson.databind.ObjectWriter;
  import com.fasterxml.jackson.databind.node.ArrayNode;
  import com.fasterxml.jackson.databind.node.ObjectNode;
  import lombok.NoArgsConstructor;

  import java.io.IOException;
  import java.io.StringWriter;
  import java.util.List;
  import java.util.Map;

  @NoArgsConstructor
  public class JsonUtil {

      private static final ObjectMapper defaultObjectMapper = ObjectMapperFactory.newDefaultMapper();
      private static volatile ObjectMapper objectMapper = null;

      public static ObjectMapper mapper() {
          return objectMapper == null ? defaultObjectMapper : objectMapper;
      }

      public static ObjectWriter writer() {
          return mapper().writer().withDefaultPrettyPrinter();
      }

      public static JsonNode parse(String var0) {
          try {
              return mapper().readTree(var0);
          } catch (Throwable var2) {
              throw new RuntimeException(var2);
          }
      }

      public static JsonNode parse(Map map) {
          StringWriter stringify = new StringWriter();
          ObjectNode objectNode = null;
          try {
              mapper().writeValue(stringify, map);
              objectNode = (ObjectNode) mapper().readTree(stringify.toString());
          } catch (IOException e) {
              e.printStackTrace();
          }

          return objectNode;
      }

      public static ObjectNode newObject() {
          return mapper().createObjectNode();
      }

      public static ArrayNode newArray() {
          return mapper().createArrayNode();
      }

      public static <T> T toObject(String jsonModel, Class<T> targetClass) throws IOException, JsonUtilException {
          try {
              return mapper().readValue(jsonModel, mapper().getTypeFactory().constructType(targetClass));
          } catch (RuntimeException e) {
              throw new JsonUtilException();
          }
      }

      public static <T> String toJsonString(T model) throws IOException, JsonUtilException {
          ObjectWriter ow = writer().withDefaultPrettyPrinter();
          try {
              return ow.writeValueAsString(model);
          } catch (RuntimeException e) {
              throw new JsonUtilException();
          }
      }

      public static <T> List<T> jsonArrayToList(String jsonArr, Class<T> targetClass) throws IOException, JsonUtilException {
          try {
              return mapper().readValue(jsonArr, mapper().getTypeFactory().constructCollectionType(List.class, targetClass));
          } catch (RuntimeException e) {
              throw new JsonUtilException();
          }
      }

      public static <T> String listToJsonArray(List<T> list) throws IOException, JsonUtilException {
          try {
              return writer().writeValueAsString(list);
          } catch (RuntimeException e) {
              throw new JsonUtilException();
          }
      }

  }

 

 

자바 기본 라이브러리에도 더 깔끔한게 있을 것 같은데... 찾아봐야지...

 

코드블럭 왜 색깔 예쁘게 안보이지? 흠

 

끝.

 

 

 

 

Comments