Как я могу десериализовать массив внутри объекта JSON? - PullRequest
2 голосов
/ 17 октября 2010

Я не могу понять, как десериализовать массив внутри объекта JSON с помощью Gson. Объект json, который я пытаюсь десериализовать, выглядит следующим образом:

{"item0":3,
 "item1":1,
 "item2":3,
 "array":[
    {"arrayItem1":321779321,
     "arrayItem2":"asdfafd",
     "arrayItem3":"asasdfadf"}]}

Мне удается создать класс, который выглядит следующим образом:

public class Watchlist {
 private int itemn0;
 private int itemn1;
 private int itemn2;
 private Object array;

}

Но когда gson пытается десериализовать массив, он выдает исключение:

com.google.gson.JsonParseException: Type information is unavailable, and the target object is not a primitive: <my gson array>

Может кто-нибудь сказать, пожалуйста, как десериализовать это?

Ответы [ 2 ]

1 голос
/ 11 марта 2011

ваш "массив" является массивом. так в классе watchList

    public class Watchlist {
    private int itemn0;
    private int itemn1;
    private int itemn2;
    private List<watchListarray> array;

 //constructor
  //getter & setter of all

}

now watchListarray class
 public class watchListarray{
  String arrayItem1="";
  String arrayItem2="";
  String arrayItem3="";
//constructor 
 //getter & setters of all
}

Теперь используйте скачать Gson см .: http://primalpop.wordpress.com/2010/06/05/parsing-json-using-gson-in-android/

0 голосов
/ 17 октября 2010

Здесь есть пара проблем:

Во-первых, я не думаю, что вы используете массив так, как вы думаете.У вас есть «arrayItem1» через 3, но они содержатся в одном объекте JSON в массиве ... поэтому массив на самом деле имеет только один элемент.

Массив, вероятно, должен выглядеть примерно так:1006 *

Во-вторых, тип array в вашем классе Java - Object ..., который не дает Gson никакой информации о типе, которую можно использовать для перевода объекта.Как правило, вы хотите объявить тип объекта, которому соответствует массив, как List<String> или List<Integer> или что-то подобное.Это дает ему необходимую информацию о типе ... массив JSON может отображаться в List, а параметр типа String сообщает ему, в какой тип преобразовывать содержимое массива.

Проблема с массивомв вашем примере это то, что оно не однородно ... в нем есть число и две строки.Как правило, следует избегать смешения таких типов в массиве / коллекции.Однако вы можете объявить тип вашего array объекта как List<String> ... вы просто получите String форму числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...