쌓고 쌓다
JSON Array를 읽고 원하는 클래스로 변환하는 방법 본문
API의 응답으로 위와 같이 JSON 데이터를 받는다.
나는 response -> body -> items -> item의 List를 받길 원한다.
JSON의 List는 어떻게 처리할 수 있을까?
테스트용으로 데이터의 contentid만 받아서 저장해보자.
다음과 같이 클래스를 만든다.
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class LocationId {
private String contentid;
}
- JsonIgnoreProperties(ignoreUnknow) : item 리스트의 원소 데이터에 contentid 외에도 많은 필드들이 있다. 만약 내가 원하는 필드만 바인딩하길 원한다면 이 옵션을 주면 된다. 이 옵션을 쓰지 않는다면 모든 필드를 바인딩하도록 필드를 작성해야한다.
String response = restTemplate.getForObject(fullUrl, String.class);
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray= jsonObject.getJSONObject("response").getJSONObject("body").getJSONObject("items").getJSONArray("item");
ObjectMapper objectMapper = new ObjectMapper();
for (Object o : jsonArray) {
LocationId locationId = objectMapper.readValue(o.toString(), LocationId.class);
System.out.println("locationId = " + locationId);
}
JSONObject를 통해 오브젝트 단위를 타고 들어간다.
응답으로 받은 JSON의 item 부분은 배열 부분이다.
getJSONArray를 통해 추출하자. 그리고 JsonArray의 인스턴스를 반복문을 돌며 Object로 받자.
objectMapper를 통해 클래스로 바인딩할 수 있다.
'프로그래밍 > spring' 카테고리의 다른 글
LogBack(Slf4j)로 로그 레벨에 따라 로그 파일 만들기 (0) | 2024.03.24 |
---|---|
테스트 코드에서 QueryDSL 쿼리 결과가 이상할때 (0) | 2024.03.18 |
테스트 코드에 MultipartFile 사용하는 방법 (파일 테스트 코드) (0) | 2024.03.10 |
컨트롤러에서 권한 체크하는 방법 (0) | 2024.03.07 |
@Transactional 롤백 동작 정책 (예외가 발생했는데 롤백이 안될때) (0) | 2024.03.06 |
Comments