GSON выдает «Ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY»?

у меня есть следующий ответ JSON.

  {"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;

}

Сообщение открытого класса реализует Serializable{

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

}

Использование GSOAP для разбора json, получение вышеуказанной ошибки. Код для разбора 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;
}

person Sushant Bhatnagar    schedule 16.01.2013    source источник


Ответы (2)


Ваша строка JSon должна быть в следующем формате:

{
  sections: 
      [
          {
             "SectionId": 1,
             "SectionName": "Android"
          }
      ]
}
person Yaqub Ahmad    schedule 08.02.2013

Я не знаю, почему вы используете Gson, поскольку Android имеет собственную сборку парсера JSON. Что касается ошибки, которую вы получаете... это потому, что JSON, который вы анализируете, является JSONArray, а не JSONObject. Я не совсем уверен, на что смотрит @Yaqub, но ваш ответ JSON должен быть следующим:

{"message":    
    {"first_name":"Sushant",
     "last_name":"Bhatnagar".....
     "status":"open"
    },"code":"200","format":"json"}

То есть без [ ] вокруг содержимого, поскольку это сообщает синтаксическому анализатору JSON, что это массив JSON только с 1 индексом, тогда как вместо этого вам явно нужен один объект JSON. Приведенный выше JSONString позволит вам проанализировать его, где вы можете получить JSONObject из тега «сообщение».

Примечание: я удалил escape-последовательности, так как хотел запустить свое редактирование через синтаксический анализатор, но вы можете легко добавить их обратно, и это все равно будет работать.

Примечание: "code":200 в исходном JSON должно быть "code":"200", иначе вы получите еще одну ошибку.

person Matt Taylor    schedule 08.02.2013