Java 从Gson读取Json会导致错误

Java 从Gson读取Json会导致错误,java,android,gson,json,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; @Seria

我正在尝试使用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;
}
}
但在分析异常ocur时:

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

如果我删除“FoodMenuRs”,它会正确运行。请提供帮助。

我对Gson库不太熟悉,但从我所看到的情况以及您接收到的错误来看,这似乎是一个层次结构问题


您的
Info
class拥有一个
FoodMenuRS
状态
,以及
TotalResults
,但您的json讲述了一个不同的故事。您的json似乎正在寻找一个名为“FoodMenuRS”的对象,该对象有两个字段,分别为
Status
TotalResults
。我的逻辑似乎得到了一个事实的证实,即当您删除
FoodMenuRS
时,它是有效的。这有帮助吗?

使用以下代码,我能够得到答案

 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 + "]";
    }
} 

您可以对TotalResults使用int或String,它将给出正确的结果。

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

希望你会喜欢


注意:)

如果将TotalResults的值用引号括起来会怎么样?您已将其定义为字符串而不是Int。也尝试将其作为Int,结果是相同的。删除“FoodMenuRs”会毫无例外地运行代码,但不会显示Status和TotalResult的值。它显示Status=null和TotalResult=0。