이전글 : [Spring] HTTP 통신으로 JSON 데이터 요청 및 응답처리
JSONObject 생성
8 Line에 있는 코드가 외부에서 응답받은 JSON 데이터라 가정해보자. String타입의 JSON포맷데이터이다.
이 값을 JSONObject 생성자 호출시 인자로 전달해주면 JSONObject 객체가 생성되며
get(String key) 메서드로 해당 key에 맞는 value를 꺼내온다. 이때 value엔 어떤타입이 담겨있는지 모르니
해당 값에 맞게 casting을 해주면 된다.
JSONObject 안에 JSONObject 생성
JSON에 대해 공부하신지 얼마 안되신분들은 JSONObject안에 또다른 JSONObject가 있을시 헤메시는 분들이 많다. 하지만 JSON이 key와 value로 이뤄진 데이터 라는것만 알면 쉽게 할 수 있다.
8 Line에 JSONObject안에 'family'라는 key에 매핑된 값이 JSONObject로 되어있다.
이때 JSONObject를 생성후 getJSONObject(String key) 메서드 호출시 JSONObject 구조로 되어있는 데이터의 key를 넘겨주면 그 key에 매핑된 값이 JSONObject로 생성된다. JSONObject안에 JSONObject가 몇개가 있던 상관없다.
단, 여기서 주의해야할 사항이 있다. 아래사진을 보자.
해당사진은 JSONObject안에 있는 key에 접근하다 발생된 예외이다.
원하는 JSON데이터를 조회할때는 상위부터 접근을 해야한다. 현재 위 사진 같은 경우 JSONObject안에
'family' 라는 JSONObject가 있으므로 제일 최상위 JSONObject에 접근한 뒤에 'family' 라는 JSONObjec에 접근해야한다.
JSONArray 생성
JSONArray는 말그대로 배열안의 요소들이 JSONObject들로 이루어진걸 알 수 있다.
접근하는 방식은 JSONObject의 각 인덱스 요소에 접근해서 위에 사진처럼 조회해주면 된다.
JSON -> JAVA 객체로 변환
JSONObject 와 JSONArray는 각각 Map이나 List로 변환하는 toMap(), toList() 메서드를 제공해준다.
toList()는 제네릭타입이 Object인데 key와 value 구조로 되어있다보니 HashMap으로 casting이 가능하다.
응용
실제로 개발할때는 위의 예제처럼 구조가 단순하진 않을것이다. 그래서 한번 복잡(?)하게 구조를 짜보고
원하는 데이터를 조회해보았다.
출처 : https://kim-jong-hyun.tistory.com/32
'Back-End > Spring' 카테고리의 다른 글
[Spring Cloud] Gateway 를 이용해 API Gateway를 구성하고 실습해보자 (Eureka Server 를 이용해 Load Balancing 하기) (0) | 2023.02.10 |
---|---|
[Spring Cloud] Service Discover Server로 Netflix Eureka 이용하기 (0) | 2023.02.10 |
[Spring] HTTP 통신으로 JSON 데이터 요청 및 응답처리 (0) | 2023.02.10 |
[Spring] 복잡한 json 데이터 받기 (0) | 2023.02.10 |
[Spring MVC] 서블릿 - HttpServletResponse (0) | 2023.02.09 |