코코딩딩

[자료구조] json 실수한것 본문

일단기록/간단기록

[자료구조] json 실수한것

겟츄 2022. 5. 9. 22:30

restapi를 만들어 db를 조회한 내용을 json 형태로 응답하게 하려고 기존에 알던 방법인 vo를 만들어 list 형태로 return을 한 결과 jsonArray의 형태가 아니라 대괄호로 vo객체들이 감싸져 있는 형태로 출력이 되었다.

ex) [ { "1234", "5678", "91011" } ]

원하는 형태로 데이터를 받기 위해서는 list에 vo를 담는 방식이 아닌 그냥 vo를 return 했더니 json으로 받을 수 있는 형태가 되었다.

 

 

json 

 

 

json 타입은 name / value 형태의 쌍으로 이루어져 있다.

 

object는 " {} "로 감싸져 있고 " : "로 값을 표현하고 " , " 로 데이터 쌍을 구분한다.

array는 []로 감싸져 있고 " , "로 값을 구분한다.

 

 

{
    "result": [
        {
            "user_id": "idid",
            "date": "20220519",
            "kind": "01"
        },
        {
            "user_id": "idid",
            "date": "20220520",
            "kind": "01"
        },
        {
            "user_id": "idid",
            "date": "20220522",
            "kind": "01"
        }
    ]
}

 

 

restapi에서 json 리턴하기

 

 

스프링 mybatis로 db에서 조회한 내용을 restcontroller 를 통해 json으로 응답을 하도록 구현하였다.

 

@RestController
@RequestMapping(value="/rest")
public class ChartRestController {
	
	@Autowired
	ChartService service;
	
	@ResponseBody
	@PostMapping("selectraw")
	public String selectRaw(@RequestBody UserVO user) throws Exception {
		Gson gson = new Gson();
        
		ChartVO vo1 = service.SelectRawData(user);
		ChartSnrVO vo2 = service.SelectSnrData(user);
		
		JsonObject obj = new JsonObject();
		String jsonRawData = gson.toJson(vo1);
		String jsonEventData = gson.toJson(vo2);
		obj.addProperty("rawdata", jsonRawData);
		obj.addProperty("eventdata", jsonEventData);
		
		System.out.println(obj);
		
		return obj.toString();
	}

}

 

gson을 이용해 vo 객체를 String으로 파싱한 후 JsonObject에 각 vo에 해당하는 key 값을 만들어 넣어주었다.

이 api에 요청을 하게 되면 다음과 같은 형태로 값을 받을 수 있다.

 

{
   "rawdata":"{\"num\":\"a123\",\"date\":\"20220510\",\"tm\":\"133107\",\"raw_data\":\"{2815,2856,2812,2903,2898}\"}",
   "eventdata":"{\"num\":\"a123\",\"date\":\"20220510\",\"tm\":\"133140\",\"a\":\"0\",\"b\":\"0\",\"c\":\"0\"}"
}

 

return값에 JsonObject를 넣고 싶었지만 toString을 해 string 형태로 해주어야 했다. 나중에는 많이 쓰는 형태인 map 형태를 구현할 예정이다.