Retrofit을 사용하여 GSON으로 중첩된 JSON 객체 가져오기
문제 개요:
JSON 응답이 구조화된 API like:
{ 'status': 'OK', 'reason': 'Everything was fine', 'content': { < some data here > }
원하는 POJO 데이터가 "content" 필드 내에 중첩되어 있는 경우 Retrofit은 기본적으로 전체 JSON 응답을 "status" 및 "reason" 필드가 있는 POJO로 역직렬화하지만 실제는 그렇지 않습니다. 관심 있는 데이터.
맞춤 설정 역직렬화:
중첩된 콘텐츠 필드를 자동으로 추출하려면 Gson을 사용하여 사용자 지정 역직렬 변환기를 생성할 수 있습니다.
콘텐츠 POJO:
정의 중첩된 데이터를 나타내는 POJO 클래스 as:
class Content { public int foo; public String bar; }
Deserializer:
JsonDeserializer
class MyDeserializer implements JsonDeserializer<Content> { @Override public Content deserialize(...) { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, Content.class); } }
Gson 구성:
GsonBuilder를 사용하여 Gson 인스턴스를 생성합니다. 사용자 정의 등록 deserializer:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer()) .create();
다양한 유형을 위한 향상된 역직렬 변환기:
"content" 필드가 있는 여러 유형의 메시지가 있는 경우 다음과 같이 역직렬 변환기를 일반화할 수 있습니다.
class MyDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(...) { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, type); } }
각 콘텐츠에 대해 이 디시리얼라이저의 인스턴스를 등록하세요. 유형.
Retrofit 통합:
맞춤형 Gson 인스턴스를 Retrofit 빌더에 전달합니다.
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
이 설정을 사용하면 Retrofit이 이제 자동으로 "content" 필드를 추출하고 적절한 POJO로 구문 분석하므로 수동으로 필드를 추출할 필요가 없습니다.
위 내용은 Retrofit과 Gson을 사용하여 중첩된 JSON 데이터를 효율적으로 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!