2014-09-17 2 views
2

API를 쿼리하기 위해 Retrofit과 Gson을 사용하고 있습니다. 그러나 JSON 응답과 같은 API를 처음 접한 적이 없습니다.Gson 주석으로 동적 목록을 구문 분석하는 방법은 무엇입니까?

답변서 :

{ 
    Response: { 
     "Black":[ 
      {"id":"123","code":"RX766"}, 
      {"id":"324","code":"RT344"}], 
     "Green":[ 
      {"id":"3532","code":"RT983"}, 
      {"id":"242","code":"RL982"}], 
     "Blue":[ 
      {"id":"453","code":"RY676"}, 
      {"id":"134","code":"R67HJH"}] 
    } 
} 

문제는리스트의 요소 아이디 예 : "블랙"입니다 동적, 그래서 A는 그들이 될 것입니다 무엇인지 전혀 모른다.

지금까지 내부 유형에 대한 클래스를 만들었습니다.

class Type { 
    @SerializedName("id") private String id; 
    @SerializedName("code") private String code; 
} 

다음과 같이 설정할 수 있습니까?

class Response { 

    @SerializedName("response") 
    List<Type> types; 
} 

그런 다음 목록 ID를 유형으로 이동하면 Type 클래스가됩니다.

class Type { 
    @SerializedName("id") private String id; 
    @SerializedName("code") private String code; 
    @SerializedName("$") private String type; //not sure how this would be populated 
} 

그렇지 않은 경우 어떻게 Gson 속성을 사용하여 파싱 할 수 있습니까?

좋아, 이제이 질문을 보았습니다. How to parse dynamic JSON fields with GSON?

멋지 네요. 응답 객체로 일반지도를 래핑하는 것이 가능합니까?

답변

3

키가 동적 인 경우 맵을 원합니다.

class Response { 
    @SerializedName("response") 
    Map<String, List<Type>> types; 
} 

역 직렬화 후 유형을 도메인에서 더 의미가있는 것으로 강제 변환 할 수 있습니다.

적합하지 않은 경우 TypeAdapter 또는 JsonDeserializer을 등록하고 맵형 데이터의 사용자 정의 역 직렬화를 List에 입력해야합니다.

+0

너무 간단합니다! 고마워요 많이 : D 조 – Lunar

+0

@ 제이크 u는 [여기] (http://stackoverflow.com/q/33758601/2624806) 언급 한 다음 구문 분석에 대한 도움을 주시기 바랍니다 수 있습니까? – CoDe

관련 문제