반응형

어찌보면 가장 중요한 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편

2. 2018/11/07 - [Develop/Spring Boot] - Spring Boot Json, Gson을 이용한 JsonObject to String, String to JsonObject- JSON 2편

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 를 이용하여 처리할 수 있다. 

반응형
반응형

 

Spring Boot에서 Json 파싱을 위해 Jackson을 기본적으로 제공해준다. Spring에서는 maven 또는 gradle을 xml에 추가해야한다.

사실 기본적인 기능은 앞선 gson과 다를게 없다.

 

Spring boot Json 1편, 2편, 4편, 마지막

1. 2018/11/06 - [Spring Boot] - Spring Boot Json, JsonObject로 만들기 - JSON 1편

2. 2018/11/07 - [Develop/Spring Boot] - Spring Boot Json, Gson을 이용한 JsonObject to String, String to JsonObject- JSON 2편

3. 2018/11/12 - [Develop/Spring Boot] - Spring Boot Deserialization Json, Deserialization JsonString to JsonObject - Json 4편

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. Jackson ObjectMapper (JsonString to Object)

 

1
<code class="hljs coffeescript">public <span class="hljs-keyword">void</span> test() {      ObjectMapper objectMapper = <span class="hljs-keyword">new</span> ObjectMapper();       <span class="hljs-built_in">String</span> Json =            <span class="hljs-string">"{ \"id\" : 1, \"password\" : \"1234\" }"</span>;         <span class="hljs-keyword">try</span> {             TestDTO t = objectMapper.readValue(Json, TestDTO.<span class="hljs-keyword">class</span>);  <span class="hljs-regexp">//</span> <span class="hljs-built_in">String</span> to <span class="hljs-built_in">Object</span>로 변환              System.out.println(<span class="hljs-string">"id = "</span> + t.getId());           System.out.println(<span class="hljs-string">"password = "</span> + t.getPassword());                       <span class="hljs-built_in">String</span> jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(t); <span class="hljs-regexp">//</span>다시 jsonString으로 변환           System.out.println(jsonString);         } <span class="hljs-keyword">catch</span> (IOException e) {             e.printStackTrace();        } }</code>

 

(위의 TestDTO은 1편에 나와있다.)

 

objectMapper를 통해 JsonString을 Object로 변환할 수 있었고 writeValueAsString을 통해 다시 JsonString으로도 변환이 가능하다

2. Object From JsonFile

 

 

1
<code class="hljs coffeescript">ObjectMapper objectMapper = <span class="hljs-keyword">new</span> ObjectMapper();  URL url = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"file:data/test.json"</span>);  TestDTO t = objectMapper.readValue(url, TestDTO.<span class="hljs-keyword">class</span>); </code>

 

test.json 파일엔

{

"id" : 1,

"password" : 1234

}

들어 가있다.

 

 

기본적인 사용방법은 여기까지이다 다음편에 Jackson JsonNodeClass를 설명한다.

Jackson 가이드 - https://www.baeldung.com/jackson

반응형

+ Recent posts