2013-01-16 3 views
1

다음 JSON 응답이 있습니다.GSON 던져 "예상 BEGIN_OBJECT하지만 BEGIN_ARRAY"?

{"message":"[{\"first_name\":\"Sushant\",\"last_name\":\"Bhatnagar\",\"receiver_id\":\"19\",\"docket_number\":\"Test12\",\"status\":\"open\"}]","code":200,"format":"json"} 

나는 다음과 같이 구문 분석을 위해 두 개의 클래스를 만들 수있다 : -

 public class JsonResponse implements Serializable { 

public String code; 
public String format; 
public List<Message> message; 

}

공용 클래스 메시지가 구현 직렬화 {

public String first_name; 
public String last_name; 
public String receiver_id; 
public String docket_number; 
public String status; 

}

G 사용 구문 분석 JSON에 대한 SOAP, 오류가 발생했습니다. 구문 분석 JSON에 대한 코드는 다음과 같습니다 -

  public static JsonResponse readDockets(String mobileNumber) { 
    JsonResponse res = new JsonResponse(); 
    HttpClient client = new DefaultHttpClient(); 
    String service = "http://api.pod.iamwhiney.com:8994/api.php?path=/deliveryRecord/refresh/"+"9968395206"; 
    HttpGet httpGet = new HttpGet(service); 
    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) {    

      HttpEntity getResponseEntity = response.getEntity(); 
      InputStream httpResponseStream = getResponseEntity.getContent(); 
      Reader inputStreamReader = new InputStreamReader(httpResponseStream);    
      Gson gson = new Gson(); 
      res = gson.fromJson(inputStreamReader, JsonResponse.class); 

     } else { 

     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return res; 
} 

답변

0

귀하의 JSon 문자열은 다음 형식이어야합니다 : 안드로이드가 당신이 GSON를 사용하는 이유

{ 
    sections: 
     [ 
      { 
      "SectionId": 1, 
      "SectionName": "Android" 
      } 
     ] 
} 
0

는 나도 몰라, 그것은 JSON에서 자신의 빌드입니다 파서. 오류에 관해서는 JSON 객체가 아니라 JSONArray를 파싱하기 때문입니다. 나는 @Yaqub이 무엇을보고 있는지 확실히 모르겠지만, 같이해야 당신의 JSON 응답은 다음과 같습니다

의 []를 콘텐츠에하지 않고있다
{"message":  
    {"first_name":"Sushant", 
    "last_name":"Bhatnagar"..... 
    "status":"open" 
    },"code":"200","format":"json"} 

이 그것이 JSON을 년대 JSON 파서 지시로 배열은 인덱스가 1 개만있는 반면, 대신 하나의 JSON 객체가 필요합니다. 위의 JSONString을 사용하면 'message'태그에서 JSONObject를 가져올 수있는 곳을 파싱 할 수 있습니다.

참고 : 파서를 통해 편집을 실행하고 싶기 때문에 이스케이프를 제거했지만 쉽게 다시 추가 할 수 있으며 여전히 작동해야합니다.

: 원래 JSON에서 "code":200 그렇지 않으면이

또 다른 오류가 발생합니다 "code":"200"을 할 필요가