어찌보면 가장 중요한 Deserialization한 JsonString 형태를 파싱하는 방법이다.
Spring Boot에서 Deserialization 파싱을 위해 Jackson과 gson을 사용하면서 동시에 클래스를 생성하여 사용해야한다.
Spring boot Json 1편, 2편, 3편, 마지막
1. 2018/11/06 - [Spring Boot] - Spring Boot Json, JsonObject로 만들기 - JSON 1편
3. 2018/11/09 - [Develop/Spring Boot] - Spring Boot Json, Jackson을 이용한 JsonParsing - Json 3편
4. 2018/11/13 - [Develop/Spring Boot] - Spring Boot Json, hashmap to json , JsonObject 만들기- JSON 마지막
번외 Database의 값을 Json으로 select하는 방법.
1. 2018/10/24 - [Spring Boot] - Spring boot jpa map, hashmap, JSON형식
2. 2018/10/28 - [Spring Boot] - Spring boot JPA EntityManager를 이용한 Map형식으로 mapping하기
Spring boot에서 MySQL JSON 타입 SELECT하는 방법
1. 2018/11/30 - [Develop/Spring Boot] - Spring boot MySQL JSON - MySQL JSON DATA TYPE 값 가져오기
1. Class를 생성하여 Gson을 이용한 Deserializaion한 JsonString to Object(JsonObject)
앞의 1편, 2편, 3편에 사용했던 TestDTO를 수정하자.
수정하기 전 먼저 Test_2DTO를 새로 생성한다
1 | <code class = "hljs typescript" ><span class = "hljs-keyword" > public </span> <span class = "hljs-class" ><span class = "hljs-keyword" > class </span> <span class = "hljs-title" >Test_2DTO</span> </span>{ <span class = "hljs-keyword" > private </span> <span class = "hljs-built_in" >String</span> name; <span class = "hljs-keyword" > private </span> int age; <span class = "hljs-keyword" > public </span> <span class = "hljs-function" ><span class = "hljs-title" >Test_2DTO</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-built_in" > super </span>(); } <span class = "hljs-keyword" > public </span> <span class = "hljs-function" ><span class = "hljs-title" >Test_2DTO</span>(<span class = "hljs-params" ><span class = "hljs-built_in" >String</span> name, int age</span>)</span> { <span class = "hljs-built_in" > super </span>(); <span class = "hljs-built_in" > this </span>.name = name; <span class = "hljs-built_in" > this </span>.age = age; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" >String</span> <span class = "hljs-function" ><span class = "hljs-title" >getName</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-keyword" > return </span> name; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" > void </span> <span class = "hljs-function" ><span class = "hljs-title" >setName</span>(<span class = "hljs-params" ><span class = "hljs-built_in" >String</span> name</span>)</span> { <span class = "hljs-built_in" > this </span>.name = name; } <span class = "hljs-keyword" > public </span> int <span class = "hljs-function" ><span class = "hljs-title" >getAge</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-keyword" > return </span> age; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" > void </span> <span class = "hljs-function" ><span class = "hljs-title" >setAge</span>(<span class = "hljs-params" > int age</span>)</span> { <span class = "hljs-built_in" > this </span>.age = age; } } </code> |
1 | <code class = "hljs typescript" ><span class = "hljs-keyword" > public </span> <span class = "hljs-class" ><span class = "hljs-keyword" > class </span> <span class = "hljs-title" >TestDTO</span> </span>{ <span class = "hljs-keyword" > private </span> Integer id; <span class = "hljs-keyword" > private </span> <span class = "hljs-built_in" >String</span> password; <span class = "hljs-keyword" > private </span> List details; <span class = "hljs-keyword" > public </span> <span class = "hljs-function" ><span class = "hljs-title" >TestDTO</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-built_in" > super </span>(); } <span class = "hljs-keyword" > public </span> <span class = "hljs-function" ><span class = "hljs-title" >TestDTO</span>(<span class = "hljs-params" >Integer id, <span class = "hljs-built_in" >String</span> password, List details</span>)</span> { <span class = "hljs-built_in" > super </span>(); <span class = "hljs-built_in" > this </span>.id = id; <span class = "hljs-built_in" > this </span>.password = password; <span class = "hljs-built_in" > this </span>.details = details; } <span class = "hljs-keyword" > public </span> Integer <span class = "hljs-function" ><span class = "hljs-title" >getId</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-keyword" > return </span> id; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" > void </span> <span class = "hljs-function" ><span class = "hljs-title" >setId</span>(<span class = "hljs-params" >Integer id</span>)</span> { <span class = "hljs-built_in" > this </span>.id = id; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" >String</span> <span class = "hljs-function" ><span class = "hljs-title" >getPassword</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-keyword" > return </span> password; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" > void </span> <span class = "hljs-function" ><span class = "hljs-title" >setPassword</span>(<span class = "hljs-params" ><span class = "hljs-built_in" >String</span> password</span>)</span> { <span class = "hljs-built_in" > this </span>.password = password; } <span class = "hljs-keyword" > public </span> List <span class = "hljs-function" ><span class = "hljs-title" >getDetails</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-keyword" > return </span> details; } <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" > void </span> <span class = "hljs-function" ><span class = "hljs-title" >setDetails</span>(<span class = "hljs-params" >List details</span>)</span> { <span class = "hljs-built_in" > this </span>.details = details; } <span class = "hljs-meta" > @Override </span> <span class = "hljs-keyword" > public </span> <span class = "hljs-built_in" >String</span> <span class = "hljs-function" ><span class = "hljs-title" >toString</span>(<span class = "hljs-params" ></span>)</span> { <span class = "hljs-keyword" > return </span> <span class = "hljs-keyword" > new </span> Gson().toJson(<span class = "hljs-built_in" > this </span>); } } </code> |
생성했다면,
1 | <code class = "hljs swift" ><span class = "hljs-keyword" > public </span> void test() { <span class = "hljs-type" >String</span> jsonString <span class = "hljs-operator" >=</span> <span class = "hljs-string" > "{<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>id<span class=" hljs-subst ">\"</span>: 1,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>password<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>1234<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>details<span class=" hljs-subst ">\"</span>: [<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " {<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>name<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>test<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>age<span class=" hljs-subst ">\"</span>: 20<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " },{<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>name<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>test2<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>age<span class=" hljs-subst ">\"</span>: 21<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " }<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " ] <span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > "}" </span>; <span class = "hljs-type" >Gson</span> gson <span class = "hljs-operator" >=</span> new <span class = "hljs-type" >Gson</span>(); <span class = "hljs-type" >TestDTO</span> t <span class = "hljs-operator" >=</span> gson.fromJson(jsonString, <span class = "hljs-type" >TestDTO</span>. class ); <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "id : " </span> <span class = "hljs-operator" >+</span>t.getId()); <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "password : " </span><span class = "hljs-operator" >+</span>t.getPassword()); <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "name1 : " </span><span class = "hljs-operator" >+</span>t.getDetails().get(<span class = "hljs-number" > 0 </span>).getName()); <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "age1: " </span><span class = "hljs-operator" >+</span>t.getDetails().get(<span class = "hljs-number" > 0 </span>).getAge()); <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "name2 : " </span><span class = "hljs-operator" >+</span>t.getDetails().get(<span class = "hljs-number" > 1 </span>).getName()); <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "age2: " </span><span class = "hljs-operator" >+</span>t.getDetails().get(<span class = "hljs-number" > 1 </span>).getAge()); } </code> |
위에 사용한 Json내용이다.,
1 | < code class = "hljs" >{ < span class = "hljs-attr" >"id"</ span >: < span class = "hljs-number" >1</ span >, < span class = "hljs-attr" >"password"</ span >: < span class = "hljs-string" >"1234"</ span >, < span class = "hljs-attr" >"details"</ span >: [ { < span class = "hljs-attr" >"name"</ span >: < span class = "hljs-string" >"test"</ span >, < span class = "hljs-attr" >"age"</ span >: < span class = "hljs-number" >20</ span > },{ < span class = "hljs-attr" >"name"</ span >: < span class = "hljs-string" >"test2"</ span >, < span class = "hljs-attr" >"age"</ span >: < span class = "hljs-number" >21</ span > } ] }</ code > |
위 test() 메소드를 실행하면 아래와 같이 Deserializaion한 JsonString이 파싱되어 JsonObject에 알맞게 들어간다.

2. Jackson의 ObjectMapper를 이용한 Json String to JsonObject 이다.
Json내용은 위와 동일한 상태에서 진행하였다.
1 | <code class = "hljs swift" ><span class = "hljs-keyword" > public </span> void test() { <span class = "hljs-type" >ObjectMapper</span> objectMapper <span class = "hljs-operator" >=</span> new <span class = "hljs-type" >ObjectMapper</span>(); <span class = "hljs-type" >String</span> jsonString <span class = "hljs-operator" >=</span> <span class = "hljs-string" > "{<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>id<span class=" hljs-subst ">\"</span>: 1,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>password<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>1234<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>details<span class=" hljs-subst ">\"</span>: [<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " {<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>name<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>test<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>age<span class=" hljs-subst ">\"</span>: 20<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " },{<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>name<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>test2<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>age<span class=" hljs-subst ">\"</span>: 21<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " }<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " ] <span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > "}" </span>; <span class = "hljs-keyword" > try </span> { <span class = "hljs-type" >TestDTO</span> t <span class = "hljs-operator" >=</span> objectMapper.readValue(jsonString, <span class = "hljs-type" >TestDTO</span>. class ); <span class = "hljs-comment" > // String to Object로 변환 System.out.println("ObjectMapper테스트"); System.out.println("id : " +t.getId()); System.out.println("password : "+t.getPassword()); System.out.println("name1 : "+t.getDetails().get(0).getName()); System.out.println("age1: "+t.getDetails().get(0).getAge()); System.out.println("name2 : "+t.getDetails().get(1).getName()); System.out.println("age2: "+t.getDetails().get(1).getAge()); } catch (IOException e) { e.printStackTrace(); } } </span></code> |

gson과 마찬가지로 잘 작동된다.
3. Jackson JsonNode 를 이용한 Deserializaion String to JsonObject
어떻게 보면 가장 핵심인 부분일 수도 있다. 클래스 생성없이 할 수 있다는 큰 장점이있다.
Deserializaion Json Data는 위와 동일한 데이터를 사용한다.
1 | <code class = "hljs swift" ><span class = "hljs-keyword" > public </span> void test() { <span class = "hljs-type" >ObjectMapper</span> objectMapper <span class = "hljs-operator" >=</span> new <span class = "hljs-type" >ObjectMapper</span>(); <span class = "hljs-type" >String</span> jsonString <span class = "hljs-operator" >=</span> <span class = "hljs-string" > "{<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>id<span class=" hljs-subst ">\"</span>: 1,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>password<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>1234<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>details<span class=" hljs-subst ">\"</span>: [<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " {<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>name<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>test<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>age<span class=" hljs-subst ">\"</span>: 20<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " },{<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>name<span class=" hljs-subst ">\"</span>: <span class=" hljs-subst ">\"</span>test2<span class=" hljs-subst ">\"</span>,<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " <span class=" hljs-subst ">\"</span>age<span class=" hljs-subst ">\"</span>: 21<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " }<span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > " ] <span class=" hljs-subst ">\r</span><span class=" hljs-subst ">\n</span>" </span> <span class = "hljs-operator" >+</span> <span class = "hljs-string" > "}" </span>; <span class = "hljs-keyword" > try </span> { <span class = "hljs-type" >System</span>.out.println(<span class = "hljs-string" > "Jackson JsonNode 테스트" </span>); <span class = "hljs-type" >JsonNode</span> t <span class = "hljs-operator" >=</span> objectMapper.readValue(jsonString, <span class = "hljs-type" >JsonNode</span>. class ); <span class = "hljs-comment" > // String to Object로 변환 JsonNode id = t.get("id"); System.out.println("id : " + id.asInt()); JsonNode password = t.get("password"); System.out.println("password : " + password.asText()); JsonNode details = t.get("details"); JsonNode details_1 = details.get(0); System.out.println("name1 : " + details_1.get("name").asText()); System.out.println("age1: " + details_1.get("age").asInt()); JsonNode details_2 = details.get(1); System.out.println("name2 : " + details_2.get("name").asText()); System.out.println("age2: " + details_2.get("name").asText()); } catch (IOException e) { e.printStackTrace(); } } </span></code> |

class 생성없이 파싱이 잘 되었다
이 처럼 웬만한 것들은 class를 생성하여 모든 Deserializaion을 파싱할 수 있으며,
Jackson JsonNode 를 이용하여 처리할 수 있다.
'Develop > Spring Boot' 카테고리의 다른 글
Spring boot AWS S3 파일 업로드 (0) | 2018.11.18 |
---|---|
Spring Boot Json, hashmap to json , JsonObject 만들기- JSON 마지막 (0) | 2018.11.13 |
Spring Boot Json, Jackson을 이용한 JsonParsing - Json 3편 (0) | 2018.11.09 |
Spring Boot Json, Gson을 이용한 JsonObject to String, String to JsonObject- JSON 2편 (0) | 2018.11.07 |
Spring Boot Json, JsonObject로 만들기 - JSON 1편 (0) | 2018.11.06 |