2013-07-29 154 views
2

這是JSON對象GSON拋出「預期BEGIN_OBJECT但STRING

[ 
    { 
    "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對象。閱讀文檔:'['表示開始json數組。 – njzk2

+0

@ njzk2根據[JSONLint](http://jsonlint.com),它是有效的。 – Dahaka

+0

@達哈卡:有效,是的,但仍然是一個數組,但不是一個對象(被幻想縮進混淆) – njzk2

回答

2

您的班級CategoryEntity是正確的,但在您的班級Entity中,屬性ListCatagories應該被稱爲​​以匹配JSON中的名稱!

除此之外,爲了解析JSON你最好做這樣的事情:

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

所以你必須包含只有一個Entity對象List,你可以只訪問值搭配:

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: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

相關問題