1

很像如何反序列化以杰克逊中的数组开头的 JSON 文件?我有一个 JSON REST 回复,看起来像

[
  {
    something
  },
  {
    something
  },
  ...
]

问题是数组是顶级的。com.google.api.client.http.json.JsonHttpParser我尝试如下调用:

Something[] result = jsonParser.parse(response, Something[].class); //array cannot be instantiated: java.lang.IllegalArgumentException: unable to create new instance of class [L...; because it is an array

List<Something> result = jsonParser.parse(response, List.class); //interface cannot be instantiated: java.lang.IllegalArgumentException: unable to create new instance of class java.util.List because it is an interface and because it has no accessible default constructor

ArrayList<Something> result = jsonParser.parse(response, ArrayList.class); //throws IllegalArgumentException: START_ARRAY

Something我的模型类在哪里应该允许反序列化元素。这些替代方案都不起作用。最后一个的堆栈跟踪是:

01-21 18:44:15.649: E/AndroidRuntime(3117): Caused by: java.lang.IllegalArgumentException: START_ARRAY
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.common.base.Preconditions.checkArgument(Preconditions.java:88)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.startParsingObject(JsonParser.java:161)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parse(JsonParser.java:233)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parse(JsonParser.java:224)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:180)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:120)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.http.json.JsonHttpParser.parse(JsonHttpParser.java:62)

我该怎么做?

4

1 回答 1

0

google-api-client 1.4.1 类似乎只是依赖于创建新实例,并且在该区域仅使用 START_OBJECT,而不是 START_ARRAY,这意味着它们不支持顶级数组。

我无法解决这个问题,我通过将所有内容更新到 google-api-client 1.6.0 来解决它,这是一个相当大的更新和重构工作。

于 2012-01-22T00:24:18.323 回答