Как десериализовать json, начиная с массива через google-api-client - PullRequest
1 голос
/ 21 января 2012

Как Как десериализовать файл 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)

Как мне это сделать?

1 Ответ

0 голосов
/ 22 января 2012

Похоже, что классы google-api-client 1.4.1 полагаются на создание новых экземпляров и работают только с START_OBJECT, а не START_ARRAY, в этой области, то есть они не поддерживают массивы верхнего уровня.

Iне смог обойти это, и я решил это, обновив все до google-api-client 1.6.0, что является довольно серьезным обновлением и рефакторингом.

...