我知道已经有很多关于这个话题的问题,但是我被困在这里,我确信这是非常愚蠢的事。
我正在解析一个看起来像这样的JSON Api(在这里重命名和简化):
{
"merchant": {
"name": "TestCo",
"id": 108
},
"category": [
{
"merchant_id": 108,
"category_name": "Baby Supplies",
"category_id": 57,
},
{
"merchant_id": 108,
"category_name": "Dining",
"category_id": 59,
}
]}
我有一个包装类,定义为:
public class WrapperObject {
public MerchantObject merchant;
public List<CategoryObject> category;}
商人和商人类别是他们自己正确定义的类。然后我尝试反序列化:
collectionType = new TypeToken<List<WrapperObject>>() {}.getType();
List<WrapperObject> wrapperObject = new Gson().fromJson(response, collectionType);
这令人担忧,GSON报告说“这不是一个JSON数组”。
直到上周,当API发生变化时,这种情况一直很好。 JSON的唯一区别是它过去看起来像这样(注意数据周围的额外包装数组):
[{
"merchant": {
"name": "TestCo",
"id": 108
},
"category": [
{
"merchant_id": 108,
"category_name": "Baby Supplies",
"category_id": 57,
},
{
"merchant_id": 108,
"category_name": "Dining",
"category_id": 59,
}
]}]
如何调整代码以解析新的JSON?注意,我无法控制JSON。谢谢!
答案 0 :(得分:1)
旧响应周围的方括号表示一个数组(在本例中为一个元素)。看起来新的API只返回一个包装器对象,而不是一个包装器对象数组。这有用吗?
wrapperType = new TypeToken<WrapperObject>() {}.getType();
WrapperObject wrapperObject = new Gson().fromJson(response, wrapperType);