JSON에서 원하는 값을 가져오기 위한
parsing
데이터를 요청하고 받아올 때 JSON 형태를 많이 이용하는데,
JSON에서 자신이 원하는 값을 가져오기 위한 방법을 정리하고자 한다.
JSON의 형태는 아래와 Map 형태와 유사하게 생겼으며,
다양한 데이터 타입도 존재하는데 간단하게 정리한 것이 있으니, 아래 블로깅을 참고하면 좋을 것 같다.
https://kcode-recording.tistory.com/73
[JSON] JSON이란?
[JSON] JSON(JavaScript Object Notation); 다양한 종류의 데이터를 활용하는 것이 중요한데, 어떤 언어든지 데이터 구조와 실제 데이터를 다른 어어 및 플랫폼에서 해석 가능한 형식으로 전송할 수 있도록
kcode-recording.tistory.com
JSON에서 원하는 값을 가져오기 위해서는 JSON을 Object type으로 변환하는 parse 과정을 거쳐야 한다.
예시를 통해 파싱하는 방법을 알아보고자 한다.
아래와 같은 JSON을 이용해서 name, age, nickname, address의 값을 각각 가져오고자 한다.
{
"name" : "홍길동",
"age" : 30,
"profile" : {
"nickname" : "길동이",
"address" : "서울"
}
}
데이터를 가져오기 위해서는 JSON을 Object type으로 변환한 후 해당 Object에서 key를 이용해서 value의 값을 가져와야 하는데,
파싱하는 방법은 아래와 같다.
// JSON이 StringBuilder로 만들어진 responseBuilder일 경우
// (1)
JSONParser parser = new JSONParser();
JSONObject info = (JSONObject) parser.parse(responseBuilder.toString());
// (2)
String name = (String) info.get("name");
Integer = Integer.parseInt(info.get("age"));
// (3)
JSONObject profile = (JSONObject) parser.parse(info.get("profile");
// (4)
String nickname = (String)profile.get("nickname");
String address = (String)(profile.get("address");
(1) JSON 상태의 데이터를 JSONObject로 변환
- JSONParser()를 이용하여 파싱하기 위한 객체를 생성
- JSONParser를 이용하여 parse 진행
(2) JSONObject 데이터에서 원하는 데이터를 가져옴
- JSONObject 데이터는 .get(key)를 이용하여 데이터를 가져올 수 있는데 전체 JSON 바로 안에 "name", "age" 라는 키를 가진 값이 존재하기 때문에 get(key)를 이용해 바로 가져올 수 있음
- String 타입이기 때문에 (String) 변환 필요
(3) profile 안의 데이터를 가져오기 위한 JSONObject로 변환
- (1)에서 파싱을 할 때 profile의 경우에는 해당 value 또한 JSON 형식이기 때문에 그 안의 데이터를 가져오기 위해서는 (1)/(2)의 과정을 한 번 더 거쳐야 함
(4) (3)에서 파싱한 것을 가지고 원하는 데이터를 가져옴
- profile 바로 아래에 "nickname", "address"를 가지고 있기 때문에 해당 키를 가진 값을 가져오기 위해 .get(key)를 이용해 가져옴
'공부 자료 > Spring' 카테고리의 다른 글
[SpringBoot] SpringBoot에서 Mybatis/Database 사용을 위한 설정 (1) | 2023.11.10 |
---|---|
[Spring Boot] driver-class-name / url 이해하기 (0) | 2023.11.10 |
[SpringFramework] Kakao API를 이용한 회원가입 및 로그인 (1) | 2023.11.09 |
[Spring] @Autowired를 사용한 DI 다양한 의존 관계 주입 방법 (0) | 2023.11.06 |
[Spring] @RequestParam, @RequestBody(& @ResponseBody), @ModelAttribute 차이 (0) | 2023.11.06 |