json -> vo 매핑{json(array포함)} Gson사용
gson을 사용해서 vo와 매핑 되는걸 알고 있었는데...
json 안에 array가 있을때 매핑 방법을 찾게되었다.
찾아본 결과 json 데이터에 array가 있을땐
mainVO안에 List<subVO>를 만들어 사용하면 된다.
ex)
json파일 형식
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 | [ { "test":"21100248891", "@_data":"21680485", "link": [ { "subtest":"https://codebeautify.org/jsonviewer", "@_subData":"20171212" }, { "subtest":"https://codebeautify.org/jsonviewer", "@_subData":"20171213" } ] }, { "test":"21100248891", "@_data":"21680485", "link": [ { "subtest":"https://codebeautify.org/jsonviewer", "@_subData":"20171212" }, { "subtest":"https://codebeautify.org/jsonviewer", "@_subData":"20171213" } ] } ] |
MainVO
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 | public class MainVO{ @SerializedName ( "test" ) private String test ; @SerializedName ( "@_data" ) private String data; @SerializedName ( "link" ) private List<Link> link; get,set생략 } |
subVO
MainVO와같은 형식으로 생성한다.
당연히 될줄알았던게 안되서 깜짝놀랐다. 확인해본결과
gson을 사용해서 list로 변환 하게되면 특수문자/가 치환되지않는 간단한 문제였다.
ex)
gson 사용시
1 | List<Map<String, Object>> JsonToList = gson.fromJson(Test.textParser( "D:\\json2.txt" ), new ArrayList<Map<String, Object>>().getClass()); |
출력 결과:
[{"test":"21100248891","link":[{"subtest":"https:\/\/codebeautify.org\/jsonviewer","@_subData":"20171212"},{"subtest":"https:\/\/codebeautify.org\/jsonviewer","@_subData":"20171213"}],"@_data":"21680485"},{"test":"21100248891","link":[{"subtest":"https:\/\/codebeautify.org\/jsonviewer","@_subData":"20171212"},{"subtest":"https:\/\/codebeautify.org\/jsonviewer","@_subData":"20171213"}],"@_data":"21680485"}]
치환이 안되어 있는 것을 확인 할 수 있다.
StringEscapeUtils.escapeHtml3(치환할문자열); <-형식으로 변경가능하다.
jsonsimple 사용시
1 2 3 4 5 | JSONParser jsonParser = new JSONParser(); Object object = jsonParser.parse(test.textParser( "D:\\json2.txt" )); JSONArray jsonArr = (JSONArray) object; |
출력결과:
[{test=21100248891, @_data=21680485, link=[{subtest=https://codebeautify.org/jsonviewer, @_subData=20171212}, {subtest=https://codebeautify.org/jsonviewer, @_subData=20171213}]}, {test=21100248891, @_data=21680485, link=[{subtest=https://codebeautify.org/jsonviewer, @_subData=20171212}, {subtest=https://codebeautify.org/jsonviewer, @_subData=20171213}]}]
jsonsimple이 자동으로 /를 치환해줌을 볼 수 있다.
VO매핑방법은 다시 gson을 이용하여 매핑해주면된다.
1 2 3 4 5 6 7 | Test[] testArr = gson.fromJson(jsonArr.toString(), Test[]. class ); for (Test test : testArr) { System.out.println(test.toString()); } |
위방법으로 매핑하면 깔끔하게 매핑되는걸 확인할 수 있다.
추가)
배열 ArrayList로 변환하기
1 | ArrayList<Test> testList = new ArrayList(Arrays.asList(testArr)); |
'개발 소발 > 개발 java(기초)' 카테고리의 다른 글
JAVA 기초 문자열 개념, 문자열 비교 (0) | 2018.01.25 |
---|---|
JAVA 기초 조건문(if,switch문) (0) | 2018.01.25 |
JAVA 기초 변수와 문자열 (0) | 2018.01.25 |
java 람다식 사용예 (0) | 2018.01.24 |
톰캣(Tomcat) 설명 및 war ROOT설정 (0) | 2018.01.24 |