일단기록/간단기록
[자료구조] 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 형태를 구현할 예정이다.