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));


+ Recent posts