JAVA json 객체를 VO, List<VO> 로 파싱하는 방법 json to Java Class
예전에 json 객체를 파싱 하기 위해선
아래와 같이 Json Object, 혹은 Array 에서 데이터를 추출해야 했습니다.
response = (JSONObject) jsonObj.get("response");
하지만 Json 관련 훌륭한 라이브러리들(Gson 이라던지 jsonSimple 이라던지..)이 등장하면서
Json 객체를 Java 객체로 파싱하는 편한 메서드 들을 제공합니다.
이번 포스팅에서는 json 객체를 Java Class (VO) 로 쉽게 변환하는 방법을 알아보도록 하겠습니다.
Gson 라이브러리 사용(2.8.2)
[ Gradle ]
compile('com.google.code.gson:gson:2.8.2')
VO 클래스로 변환하기 위해서는 gson 에서 제공하는 fromJson 메서드를 활용합니다.
예를들어 NgExImgVO 클래스로 파싱하는 방법은 아래와 같습니다.
Gson gons = new Gson();
NgExImgVO imgVO = gson.fromJson(jsonData.toString(), NgExImgVO.class);
여기서 주의 하셔야 할 점은 Json Object의 키값과 파싱하고자 하는 VO 객체의 변수명이
일치하여야 한다는 점입니다. 일치하지 않는다면 value값은 set되지 않습니다. (null로 set)
그렇다면
Json Array를 List 객체로 파싱은 어떻게 할까요?
Java의 TypeToken을 활용하여야 합니다.
참고
TypeToken을 알기위해선 클래스 리터럴, 타입의 개념을 알아야 합니다.
클래스 리터럴은 String.class, Integer.class 와 같은 형태를 말하며,
String.class 의 타입은 Class<String> 입니다.
TypeToken은 위의 타입을 나타내는 토큰으로, 클래스 리터럴이 타입 토큰으로 사용됩니다.
단순히 위에서 알아본 fromJson 메서드의 파라미터로 List.class를 넘겨주면 될 것 같습니다.
Gson gons = new Gson();
List<NgExImgVO> imgVO = gson.fromJson(jsonData.toString(), List.class);
하지만 이는 에러가 발생하게 됩니다. 이유는 formJson 메서드에서 List 타입인 것은 알지만, 어떤 객체의 변수에 set을 할 것인지를 알 수 없기 때문입니다. 제네릭에 대한 정보가 없는 것이죠.
이를 알기위해 TypeToken을 활용하여, List<NgExImgVO> 의 타입을 넘겨주면 됩니다.
Type listType = new TypeToken<ArrayList<InjurySeverityVO>>(){}.getType();
List<InjurySeverityVO> list = gson.fromJson(jsonData.toString(), listType);
'Programing > JAVA' 카테고리의 다른 글
Logback 특정 문자열 포함하는 메시지 제외 설정, Filter 사용법 (0) | 2018.11.02 |
---|---|
Java Spring boot WebSocket Client 구현 Jetty websocket-client 활용 (0) | 2018.11.01 |
Mybatis insert, update null 처리, 부적합한 열 유형 처리방법, Oracle Merge (0) | 2018.10.11 |
Spring Framework DBCP HikariCP 적용방법 (0) | 2018.09.05 |
Java JCE를 이용하기 위한 개발 환경 설정, Provider 추가 (0) | 2018.08.30 |
댓글