내가 원하는 데이터는 "raw"(사진 URL 주소가 담겨있음) 라는 항목이며,
이것은 "results 배열 내부의 urls 객체 내부"에 담겨있는 상태였다.//데이터 {"total":10000,"results":[{"urls":{"raw":"https://images.~
먼저, response.body() 에서 내가 보고싶은 데이터가 들어있는 results 배열만 꺼내고자 하였다.
response.body().let { jsonElement -> val body = jsonElement?.asJsonObject val resultsArray = body?.getAsJsonArray("results")
로그를 찍어보니 내가 원하던대로 배열이 추출되었다.
val resultArrayToObject = resultsArray?.asJsonObject
위 코드를 추가하여 실행한 결과, 앱이 죽었다..
에러코드를 읽어보니 "java.lang.IllegalStateException: Not a JSON Object: ~" 라고 떴다.
해석해보니 "니가 읽으려는건 jsonArray인데, 이걸 왜 jsonObject로 읽으려 하냐?"
라는 느낌 같았다.
resultsArray?.forEach { jsonElement ->
val jsonObjects = jsonElement.asJsonObject
val getRawString = jsonObjects.get("urls").asJsonObject.get("raw").asString
}
문제를 해결하기 위해,
"배열 안의 데이터를 한줄씩 표현해보자" 하여 forEach 문을 돌리고,
"urls" 객체 내부의 "raw" 객체에 접근하기 위해 위와 같이 코드를 짰다.
실행하였더니 내가 원하는 raw 객체에 대한 데이터만 추출되었다.
- 결론 -
아직 json 데이터의 구조(객체 or 배열)을 읽는 것이 더디고,
데이터 가공 과정이 익숙치 않고,
json 데이터의 각 항목에 접근하는 방식에 대한 지식이 부족한 상태인 것 같다.
여러 구조의 데이터 가공 과정을 반복 실습하며 익숙해지도록 노력하자!