최신 애플리케이션에서는 중첩된 JSON 구조가 포함된 API 응답을 접하는 것이 일반적입니다. 이는 중첩된 계층 내에서 특정 데이터 필드로 작업하려는 경우 문제가 될 수 있습니다. 이 가이드에서는 Retrofit을 사용하여 중첩된 JSON 객체에서 원하는 콘텐츠를 추출하는 사용자 정의 Gson 역직렬 변환기를 만드는 방법을 보여줍니다.
다음 구조의 API 응답을 고려하세요.
{ 'status': 'OK', 'reason': 'Everything was fine', 'content': { < real data here > } }
상태 및 이유 필드가 있는 POJO가 있지만 필요한 데이터는 중첩된 콘텐츠 내에 있습니다. object.
중첩된 콘텐츠를 추출하려면 실제 POJO 디시리얼라이저를 래핑하는 사용자 지정 디시리얼라이저를 생성합니다. 작동 방식은 다음과 같습니다.
class MyDeserializer implements JsonDeserializer<Content> { @Override public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) { // Get the "content" element from the parsed JSON JsonElement content = je.getAsJsonObject().get("content"); // Deserialize it using a new Gson instance to avoid recursion return new Gson().fromJson(content, Content.class); } }
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer()) .create();
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
이제 Retrofit을 사용하여 API 응답을 역직렬화하고 중첩된 콘텐츠에 직접 콘텐츠 객체로 액세스할 수 있습니다.
"content" 필드를 공유하는 여러 유형의 메시지가 있는 경우 다음과 같이 일반 역직렬 변환기를 생성할 수 있습니다. 다음:
class MyDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) { // Get the "content" element from the parsed JSON JsonElement content = je.getAsJsonObject().get("content"); // Deserialize it using a new Gson instance to prevent recursion return new Gson().fromJson(content, type); } }
각 콘텐츠 유형에 대해 이 역직렬 변환기를 등록하세요. Retrofit은 API 응답 유형에 따라 적절한 디시리얼라이저를 자동으로 사용합니다.
위 내용은 Gson 및 Retrofit을 사용하여 API 응답에서 중첩된 JSON 개체를 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!