반응형

어찌보면 가장 중요한 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 를 이용하여 처리할 수 있다. 

반응형

+ Recent posts