从Gson读Json会导致错误

时间:2011-09-06 10:24:45

标签: java android 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;
}
}

但在解析异常情况时:

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

如果我删除'FoodMenuRs'它会正确运行。请帮忙。

3 个答案:

答案 0 :(得分:1)

我对Gson库并不熟悉,但从我看到的内容和你收到它的错误看起来似乎是层次结构问题。

您的Info班级 hasA FoodMenuRSStatusTotalResults,但您的json讲的是另一个故事。看起来你的json正在寻找一个名为'FoodMenuRS'的对象,它有两个名为StatusTotalResults的字段。我的逻辑似乎得到了这样一个事实的证实,即当你删除FoodMenuRS时它会起作用。这有帮助吗?

答案 1 :(得分: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 for TotalResults,它会给出正确的结果。

答案 2 :(得分:0)

当您在从客户端接收数据的控制器中设置@RequestBody时,可能会发生这种情况。您看到JSON适配器何时不知道请求。

希望'll

问候:)