Java 使用JsonArray和JsonObject读取Json时发生Gson异常
我试图使用Gson调用json响应。但它在一个位置上包含一个JSONArray对象,在同一层次结构中包含一个JSONObject,我的json响应如下:Java 使用JsonArray和JsonObject读取Json时发生Gson异常,java,android,web-services,json,gson,Java,Android,Web Services,Json,Gson,我试图使用Gson调用json响应。但它在一个位置上包含一个JSONArray对象,在同一层次结构中包含一个JSONObject,我的json响应如下: "{"SERVICES":{"Results":[{"Items":{"Item":[{"@Id":"10"},{"@Id":"12"}]}}, {"Items":{"Item":{"@Id":"13"}}}]}}" 在这个层次结构中 {"SERVICES": {"Results": [
"{"SERVICES":{"Results":[{"Items":{"Item":[{"@Id":"10"},{"@Id":"12"}]}},
{"Items":{"Item":{"@Id":"13"}}}]}}"
在这个层次结构中
{"SERVICES":
{"Results":
[
{"Items":
{"Item":
[
{"@Id":"10"},
{"@Id":"12"}
]
}
},
{"Items":
{"Item":
{"@Id":"13"}
}
}
]
}
}
这里第一个“Item”元素包含一个数组,第二个是一个对象。下面是我的代码
import java.util.Iterator;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
public class Next {
public static void main(String args[]){
String jsonData = Services.getJsonData(); //{"SERVICES":{"Results":[{"Items":{"Item":[{"@Id":"10"},{"@Id":"12"}]}}, {"Items":{"Item":{"@Id":"13"}}}]}}
TResponseInfo responseInfo = new Gson().fromJson(jsonData, TResponseInfo.class);
}
class TResponseInfo{
TServicesInfo SERVICES;
}
class TServicesInfo {
List<TResultsInfo> Results;
}
class TResultsInfo {
TItemsInfo Items;
}
class TItemsInfo {
List<TItemInfo> Item;
//TItemInfo Item;
}
class TItemInfo {
@SerializedName("@Id")
int Id;
}
import java.util.Iterator;
导入java.util.List;
导入com.google.gson.gson;
导入com.google.gson.annotations.SerializedName;
公共类下一个{
公共静态void main(字符串参数[]){
字符串jsonData=Services.getJsonData();//{“Services”:{“Results”:[{“Items”:{“Item”:{“Item”:[{“@Id”:“10”},{“@Id”:“12”}]}},{“Items”:{“Item”:{@Id”:“13”}}}}}
TResponseInfo responseInfo=new Gson().fromJson(jsonData,TResponseInfo.class);
}
TResponseInfo类{
TServicesInfo服务;
}
类TServicesInfo{
列出结果;
}
TResultsInfo类{
滴度信息项目;
}
类titeminfo{
清单项目;
//滴度信息项;
}
类TItemInfo{
@SerializedName(“@Id”)
int-Id;
}
这里我得到了一个例外:
由于类型为java.util.List,无法反序列化json对象{“@Id”:“13”}
消息:这不是一个JSON数组。更新:您的JSON似乎是错误的,您的
项:
是一个数组,但JSON中的秒字段是一个对象
首先,你有:
"Item":
[
{"@Id":"10"},
{"@Id":"12"}
]
"Item":
{"@Id":"13"}
那么你有:
"Item":
[
{"@Id":"10"},
{"@Id":"12"}
]
"Item":
{"@Id":"13"}
这应该是:
"Item":
[
{"@Id":"13"}
]
使用Gson管理泛型可能很困难。我建议您改用数组。例如,类似以下内容:
class TResponseInfo{
TServicesInfo SERVICES;
}
class TServicesInfo {
TResultsInfo[] Results; // an array instead of a generic List
}
class TResultsInfo {
TItemsInfo Items;
}
class TItemsInfo {
TItemInfo[] Item; // an array instead of a generic List
}
谢谢Jonas,但我也得到了一个例外:“com.google.gson.JsonObject不能转换为com.google.gson.JsonArray”。