我正在尝试使用Gson调用json响应。但它在一个地方包含一个JSONArray对象,在同一个层次结构中包含一个JSONObject,这里我的json响应是:
"{"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;
}
我在这里得到例外:
无法反序列化json对象{“@Id”:“13”}给定类型java.util.List
和消息:这不是JSON数组。
答案 0 :(得分:0)
更新:您的Json似乎错了,您的Item:
是一个数组,但JSON中的秒字段是一个对象。
首先你有:
"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
}