반응형

MySQL  Workbench 에서 프로시저에서 DELIMITER 사용시 아래와 같은 에러가 발생한다.


 Syntax error: unexpected 'DELIMITER'




이유는 Workbench에서 프로시저 작성할 때 이미 DELIMITER를 눈에 보이진 않지만 자동으로 제공해주기 때문이다.

아래와 같이 다시 DELIMITER를 지우고 APPLY를 한번 눌러보면 DELIMITER가 자동으로 제공해주는 것을 볼 수 있다.



따라서 Workbench에서 DELIMITER를 선언할 필요가 없다.

반응형
반응형


마지막으로 hashmap 을 json으로 만드는 방법과, JsonObject를 생성하는 방법이다.



Spring boot Json 1편, 2편, 3편, 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/09 - [Develop/Spring Boot] - Spring Boot Json, Jackson을 이용한 JsonParsing - Json 3편

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



번외 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 값 가져오기



HashMap을 Json으로 만드는 방법을 배우기에 앞서 JsonObject를 생성하는 방법을 먼저 본다.


1. google-json-simple을 이용한 JsonObject 만드는 방법.


xml에 아래와 같은 dependency를 추가한다.


		com.googlecode.json-simple
		json-simple
		1.1


우리가 만들어볼 Json예제는 4편에서 사용한 Json이다.


{
    "id": 1,
    "password": "1234",
    "details": [
        {
            "name": "test",
            "age": 20
        },{
            "name": "test2",
            "age": 21
        }
    ] 
}

그리고 아래와 같이 JSONObject라는 것과 JSONArray라는 것을 사용하여 JSON을 생성할 수 있다.


public void test() {
		JSONObject obj = new JSONObject();
		JSONArray arr = new JSONArray();
		
		obj.put("id", 1);
		obj.put("password", "1234");
		
		JSONObject obj2 =new JSONObject();
		obj2.put("name", "test");
		obj2.put("age", 20);
		
		arr.add(obj2);
		
		obj2 = new JSONObject();
		obj2.put("name", "test2");
		obj2.put("age", 21);
		
		arr.add(obj2);
		
		obj.put("details", arr);
		
		System.out.println(obj.toString());
		
}




현재는 Json이 Array를 포함하여 JSONArray를 사용하였지만 일반 적인 key : value 형태는 JSONObject 하나만으로도 생성할 수 있다.


2. Gson을 이용한JsonObject 생성


이 방법은 Json  2편에서 배웠으나 이번엔 Array를 사용하기 때문에 다시 한번 해본다. 사실 위의 json-simple과 별반 다를게 없다.



	public void test() {
		Gson gson = new Gson();
		JsonObject obj = new JsonObject();
		JsonArray arr = new JsonArray();
		
		obj.addProperty("id", 1);
		obj.addProperty("password", "1234");
		
		JsonObject obj2 = new JsonObject();
		obj2.addProperty("name", "test");
		obj2.addProperty("age", 20);
		arr.add(obj2);
		
		obj2= new JsonObject();
		obj2.addProperty("name", "test2");
		obj2.addProperty("age", 21);
		
		arr.add(obj2);
		
		obj.add("details", arr);
		
		String jsonString = obj.toString();
		
		System.out.println("gson을 이용한 객체생성");
		System.out.println(jsonString);
		
	}




3. HashMap을 Json으로 만드는 방법.


HashMap<String, Object>를 선언해서 이번 편에서 했던 모든 것들(json-simple의 obj와 gson의 obj)을 HashMap에 put해보고

일반 데이터를 HashMap에 put해서 json으로 변환해 보는 법을 해본다. 그리고 gson의 prettyprinting을 이용하여 예쁘게 출력해본다.



public void test() {
		JSONObject obj = new JSONObject();
		JSONArray arr = new JSONArray();

		obj.put("id", 1);
		obj.put("password", "1234");

		JSONObject obj2 = new JSONObject();
		obj2.put("name", "test");
		obj2.put("age", 20);

		arr.add(obj2);

		obj2 = new JSONObject();
		obj2.put("name", "test2");
		obj2.put("age", 21);

		arr.add(obj2);

		obj.put("details", arr);

		
		JsonObject g_obj = new JsonObject();
		JsonArray g_arr = new JsonArray();

		g_obj.addProperty("id", 1);
		g_obj.addProperty("password", "1234");

		JsonObject g_obj2 = new JsonObject();
		g_obj2.addProperty("name", "test");
		g_obj2.addProperty("age", 20);
		g_arr.add(g_obj2);

		g_obj2 = new JsonObject();
		g_obj2.addProperty("name", "test2");
		g_obj2.addProperty("age", 21);

		g_arr.add(g_obj2);

		g_obj.add("details", g_arr);
		
		HashMap map = new HashMap();
		map.put("json-simple", obj);
		map.put("gson", g_obj);
		map.put("HashMap", "맵테스트");
		map.put("숫자테스트", 1234567890);
		
		Gson gson = new GsonBuilder().setPrettyPrinting().create();
		String jsonString = gson.toJson(map, new TypeToken>() {
		}.getType());
		System.out.println("HashMap to JSON");
		System.out.println(jsonString);

	}



이로써 Spring boot 에서의 Json에 대한 학습을 마무리한다.

1편부터 마지막편까지의 내용과 번외편 내용 2개만 알아도 Spring boot에서 모든 데이터들을 Json으로 만들 수 있다.


반응형
반응형

어찌보면 가장 중요한 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를 새로 생성한다

public class Test_2DTO { 	private String name; 	private int age; 	 	public Test_2DTO() { 		super(); 	}  	public Test_2DTO(String name, int age) { 		super(); 		this.name = name; 		this.age = age; 	}  	public String getName() { 		return name; 	}  	public void setName(String name) { 		this.name = name; 	}  	public int getAge() { 		return age; 	}  	public void setAge(int age) { 		this.age = age; 	} } 
public class TestDTO {  	private Integer id; 	private String password; 	private List details; 	 	 	public TestDTO() { 		super(); 	}   	public TestDTO(Integer id, String password, List details) { 		super(); 		this.id = id; 		this.password = password; 		this.details = details; 	}   	public Integer getId() { 		return id; 	}   	public void setId(Integer id) { 		this.id = id; 	}   	public String getPassword() { 		return password; 	}   	public void setPassword(String password) { 		this.password = password; 	}   	public List getDetails() { 		return details; 	}   	public void setDetails(List details) { 		this.details = details; 	}   	@Override 	public String toString() { 		return new Gson().toJson(this); 	} } 

 

생성했다면, 

 

public void test() { 		 		String jsonString = "{\r\n" +  				"    \"id\": 1,\r\n" +  				"    \"password\": \"1234\",\r\n" +  				"    \"details\": [\r\n" +  				"        {\r\n" +  				"            \"name\": \"test\",\r\n" +  				"            \"age\": 20\r\n" +  				"        },{\r\n" +  				"            \"name\": \"test2\",\r\n" +  				"            \"age\": 21\r\n" +  				"        }\r\n" +  				"    ] \r\n" +  				"}"; 		Gson gson = new Gson(); 		TestDTO t = gson.fromJson(jsonString, TestDTO.class); 		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()); 		 	} 

위에 사용한 Json내용이다., 

 

{     "id": 1,     "password": "1234",     "details": [         {             "name": "test",             "age": 20         },{             "name": "test2",             "age": 21         }     ]  }

 

위 test() 메소드를 실행하면 아래와 같이 Deserializaion한 JsonString이 파싱되어 JsonObject에 알맞게 들어간다.

 

 

2. Jackson의 ObjectMapper를 이용한 Json String to JsonObject 이다.

 

Json내용은 위와 동일한 상태에서 진행하였다.

 

public void test() { 		ObjectMapper objectMapper = new ObjectMapper(); 		  		String jsonString = "{\r\n" +  				"    \"id\": 1,\r\n" +  				"    \"password\": \"1234\",\r\n" +  				"    \"details\": [\r\n" +  				"        {\r\n" +  				"            \"name\": \"test\",\r\n" +  				"            \"age\": 20\r\n" +  				"        },{\r\n" +  				"            \"name\": \"test2\",\r\n" +  				"            \"age\": 21\r\n" +  				"        }\r\n" +  				"    ] \r\n" +  				"}"; 		  try { 	            TestDTO t = objectMapper.readValue(jsonString, TestDTO.class);    // 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(); 	        }		 } 

gson과 마찬가지로 잘 작동된다.

3. Jackson JsonNode 를 이용한 Deserializaion String to JsonObject

 

어떻게 보면 가장 핵심인 부분일 수도 있다. 클래스 생성없이 할 수 있다는 큰 장점이있다.

 

Deserializaion Json Data는 위와 동일한 데이터를 사용한다.

 

 

public void test() { 		ObjectMapper objectMapper = new ObjectMapper();  		String jsonString = "{\r\n" + "    \"id\": 1,\r\n" + "    \"password\": \"1234\",\r\n" 				+ "    \"details\": [\r\n" + "        {\r\n" + "            \"name\": \"test\",\r\n" 				+ "            \"age\": 20\r\n" + "        },{\r\n" + "            \"name\": \"test2\",\r\n" 				+ "            \"age\": 21\r\n" + "        }\r\n" + "    ] \r\n" + "}"; 		try { 			System.out.println("Jackson JsonNode 테스트"); 			JsonNode t = objectMapper.readValue(jsonString, JsonNode.class); // 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(); 		} } 

class 생성없이 파싱이 잘 되었다

 

이 처럼 웬만한 것들은 class를 생성하여 모든 Deserializaion을 파싱할 수 있으며,

Jackson JsonNode 를 이용하여 처리할 수 있다. 

반응형

+ Recent posts