Java 从Gson读取Json会导致错误
我正在尝试使用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
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。