2013-07-29 3 views
2

Это Json ОбъектGSON бросать «ожидаемый BEGIN_OBJECT но СТРОКА

[ 
    { 
    "UserId":"demouser1", 

    "Catagories":[ 
     { 
     "CatagoryName":"Entertainment", 
     "Persent":"25" 
     }, 
     { 
     "CatagoryName":"Household", 
     "Persent":"25" 
     }, 
     { 
     "CatagoryName":"Movie", 
     "Persent":"25" 
     }, 
     { 
     "CatagoryName":"Misc", 
     "Persent":"25" 
     } 
    ], 

    "RequestId":null, 

    "ResponseStatus":false, 

    "Token":null 
    } 

] 

Используются следующие подходы для разбора выше Json

public class CategoryEntity { 

    private String CatagoryName; 
    private String Persent; 
    public String getCatagoryName() { 
     return CatagoryName; 
    } 
    public void setCatagoryName(String catagoryName) { 
     CatagoryName = catagoryName; 
    } 
    public String getPersent() { 
     return Persent; 
    } 
    public void setPersent(String persent) { 
     Persent = persent; 
    } 
} 



import java.util.List; 

public class Entity { 

    private String UserId; 

    public String getUserId() { 
     return UserId; 
    } 

    public void setUserId(String userId) { 
     UserId = userId; 
    } 

    public List<CategoryEntity> getListCatagories() { 
     return ListCatagories; 
    } 

    public void setListCatagories(List<CategoryEntity> listPMMCatagories) { 
     ListCatagories = listPMMCatagories; 
    } 

    public String getRequestId() { 
     return RequestId; 
    } 

    public void setRequestId(String requestId) { 
     RequestId = requestId; 
    } 

    public boolean isResponseStatus() { 
     return ResponseStatus; 
    } 

    public void setResponseStatus(boolean responseStatus) { 
     ResponseStatus = responseStatus; 
    } 

    private List<CategoryEntity> ListCatagories; 

    private String RequestId; 

    private String Token; 

    public String getToken() { 
     return Token; 
    } 

    public void setToken(String token) { 
     Token = token; 
    } 

    private boolean ResponseStatus; 

} 

И Следуя подход к преобразовать объект JSON к соответствующему объекту

Gson gson =new Gson(); 

JsonPrimitive listCatagoriesElement= element.getAsJsonPrimitive(); 

        System.out.println("listCatagoriesElement.getAsString()>>"+listCatagoriesElement.getAsString()); 

sysout prints: listCatagoriesElement.getAsString()>>[{"UserId":"user1","ListCatagories":[{"CatagoryName":"Entertainment","Persent":"25"},{"CatagoryName":"Household","Persent":"25"},{"CatagoryName":"Movie","Persent":"25"},{"CatagoryName":"Misc","Persent":"25"}],"RequestId":null,"ResponseStatus":false,"Token":null}] 

Entity entity = gson.fromJson(listCatagoriesElement, Entity.class); 

Любые идеи, как это исправить?

Спасибо!

+0

нет. это не объект json. read doc: '[' указывает начало json-массива. – njzk2

+0

@ njzk2 Согласно [JSONLint] (http://jsonlint.com), это действительно. – Dahaka

+0

@ Дахака: действительно, да, но все же массив, а не объект (был смущен фэнтезийным отступом) – njzk2

ответ

2

Ваш класс CategoryEntity правильно, но в своем классе Entity, атрибут ListCatagories должен называться Catagories совпадать с именем в формате JSON!

Кроме того, для того, чтобы разобрать на JSON лучше бы сделать что-то вроде этого:

Gson gson = new Gson(); 
Type listType = new TypeToken<List<Entity>>() {}.getType(); 
List<Entity> entities = gson.fromJson(yourJsonString, listType); 

Таким образом, вы будете иметь List, содержащую только один Entity объект, и вы можете получить доступ к значениям просто с:

String catagoryNameI = entities.get(0).getCatagories().get(i).getCatagoryName(); 
String persentI = entities.get(0).getCatagories().get(i).getPersent(); 

вы должны сделать это, потому что весь ваш ответ JSON является массивом, в окружении [ ... ], так что вам нужно, чтобы разобрать его в какой-нибудь List ...

+0

, когда я пытаюсь это сделать, я получаю исключение, которое говорит 07-30 11: 14: 18.563: E/AndroidRuntime (299): вызвано: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но было STRING 07-30 11: 14: 18.563: E/AndroidRuntime (299): \t at com.google.gson .Gson.fromJson (Gson.java:815) 07-30 11: 14: 18.563: E/AndroidRuntime (299): \t at com.google.gson.Gson.fromJson (Gson.java:868) – sajay

Смежные вопросы