2014-09-16 3 views
0

입력 문자열을 제공하는 API를 사용 중이며 일부 키워드 자동 완성 및 제품 노드를 반환합니다.gson으로 JSON 응답을 비 직렬화하는 데 문제가 발생했습니다.

내 목표는 응답을 역 직렬화하고 사용할 수있는 자동 완성 문자열 목록을 얻는 것입니다. gson을 사용하는 Retrofit 라이브러리로 안드로이드 애플리케이션에서 이것을 구현하려고합니다.

먼저, 내가 가진 응답이 일반적인 JSON 응답인지 확실하지 않습니다. '노드'항목에는 키/값 쌍이 있지만 입력 문자열과 자동 완성 목록에는 사용할 수있는 키가없는 것 같습니다.

["pol", 
["polaroid camera", 
"polo", 
"polo ralph lauren", 
"polo ralph lauren men", 
"polar heart rate monitor", 
"polaroid", 
"polo shirt", 
"polar watch", 
"police scanner", 
"polar"], 
[{ 
    "nodes": [{ 
     "alias": "electronics", 
     "name": "Electronics" 
    }, 
    { 
     "alias": "electronics-tradein", 
     "name": "Electronics Trade-In" 
    }] 
}, 
{ 

}, 
{ 

}, 
{ 

}, 
{ 

}, 
{ 

}, 
{ 

}, 
{ 

}, 
{ 

}, 
{ 

}], 
[]] 

이것은 gson이 비 직렬화하려는 자바 클래스에서 시도한 것입니다. 그러나 gson은 JSON 키와 일치하도록 클래스 변수를 필요로합니다 (Node 클래스에서는 true이지만 나머지는 그렇지 않습니다).

class Response { 
    String input; 
    List<String> keywords; 
    List<Node> nodes; 
} 

class Node { 
    String alias; 
    String name; 
} 

답변

1

json에는 두 개의 키만 있습니다. 이것은 주로 Json Array입니다.

당신이 JSON을 변경할 수 있다면, 더 같이 할이

{ 
    "input" : "pol", 
    "keywords" : ["polaroid camera","polo",...], 
    "nodes": [{ 
      "alias": "electronics", 
      "name": "Electronics" 
     }, 
     { 
      "alias": "electronics-tradein", 
      "name": "Electronics Trade-In" 
     }] 
} 
+0

그래 내가 응답이 해당 형식에 있다면 이상적 일 것이다 것으로 나타났습니다. 나는 API를 호출 할 때마다 응답을 조작하는 것보다 더 우아한 해결책이 있기를 바랬다. – csab

+0

먼저 JSonArray로 구문 분석 한 다음 각 요소를 별도로 처리합니다. 그러나 실제로는 "유효한 json" – Dave

관련 문제