2011-09-06 77 views
0

我想使用Gson解析簡單的Json字符串。從Gson讀取Json導致錯誤

String json = "{'FoodMenuRS':{'Status':'Success','TotalResults':4}}"; 

對於閱讀JSON我寫的代碼:

Info info = gson.fromJson(json, Info.class); 

這裏信息是

public class Info { 
@SerializedName("FoodMenuRS") 
public String FoodMenuRS; 

@SerializedName("Status") 
public String Status; 

@SerializedName("TotalResults") 
public String TotalResults; 

public String getFoodMenuRS() { 
    return FoodMenuRS; 
} 

public void setFoodMenuRS(String foodMenuRS) { 
    FoodMenuRS = foodMenuRS; 
} 

public String getStatus() { 
    return Status; 
} 

public void setStatus(String status) { 
    Status = status; 
} 

public String getTotalResults() { 
    return TotalResults; 
} 

public void setTotalResults(String totalResults) { 
    TotalResults = totalResults; 
} 
} 

但在解析異常ocuurs:

The JsonDeserializer StringTypeAdapter failed to deserialize json object {"Status":"Success","TotalResults":4} 

如果我刪除'FoodMenuRs'它正確運行。請幫忙。

+0

如果你讓使用totalResults包裹在引號中的價值?你有它定義爲一個字符串不是一個Int。 –

+0

也試着把int當成,結果是一樣的。 – Neetesh

回答

1

我不是那麼熟悉Gson庫,但是從我所看到的以及接收它的錯誤看起來像是一個層次結構問題。

Info哈薩FoodMenuRSStatus,並TotalResults但你的JSON講述了一個不同的故事。看起來你的json正在尋找名爲'FoodMenuRS'的對象,該對象有兩個字段StatusTotalResults。我的邏輯似乎得到了這一事實的證實,即它在您刪除FoodMenuRS時起作用。這有幫助嗎?

+0

刪除「FoodMenuRs」無例外地運行代碼,但不顯示Status和TotalResult的值。它顯示Status = null和TotalResult = 0。 – Neetesh

0

使用下面的代碼我能夠得到答案。

public static void main(String[] args) { 
      // TODO Auto-generated method stub 
      String json = "{'FoodMenuRS':'ABC','Status':'Success','TotalResults':4}"; 
      Gson gson = new Gson(); 
      Info info = gson.fromJson(json, Info.class); 
      System.out.println(info.toString()); 

     } 


public class Info { 
    @SerializedName("FoodMenuRS") 
    public String FoodMenuRS; 
    @SerializedName("Status") 
    public String Status; 
    @SerializedName("TotalResults") 
    **public int TotalResults;** 
    /** 
    * @return the foodMenuRS 
    */ 
    public String getFoodMenuRS() { 
     return FoodMenuRS; 
    } 
    /** 
    * @param foodMenuRS the foodMenuRS to set 
    */ 
    public void setFoodMenuRS(String foodMenuRS) { 
     FoodMenuRS = foodMenuRS; 
    } 
    /** 
    * @return the status 
    */ 
    public String getStatus() { 
     return Status; 
    } 
    /** 
    * @param status the status to set 
    */ 
    public void setStatus(String status) { 
     Status = status; 
    } 
    /** 
    * @return the totalResults 
    */ 
    public int getTotalResults() { 
     return TotalResults; 
    } 
    /** 
    * @param totalResults the totalResults to set 
    */ 
    public void setTotalResults(int totalResults) { 
     TotalResults = totalResults; 
    } 
    /* (non-Javadoc) 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() { 
     return "Info [FoodMenuRS=" + this.FoodMenuRS + ", Status=" + this.Status 
       + ", TotalResults=" + this.TotalResults + "]"; 
    } 
} 

你可以使用int或String作爲TotalResults它會給出正確的結果。

0

當您在接收來自客戶端的數據的控制器中設置@RequestBody錯誤時,可以發生這種情況。您會看到JSON適配器何時不知道請求。

希望那會

問候:)