> Java > java지도 시간 > 본문

Retrofit과 Gson을 사용하여 중첩된 JSON 데이터를 효율적으로 추출하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-19 17:36:03
원래의
264명이 탐색했습니다.

How Can I Efficiently Extract Nested JSON Data Using Retrofit and Gson?

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 구현 JSON 응답에서 "content" 요소를 추출하고 이를 Content POJO로 역직렬화합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿