Разбор массива JSON с помощью gson - PullRequest
3 голосов
/ 24 марта 2012

У меня проблемы с анализом моего JSON, который я получаю из JavaScript. Формат JSON таков:

[{"positions":[{"x":50,"y":50},{"x":82,"y":50},{"x":114,"y":50},{"x":146,"y":50}]},{"positions":[{"x":210,"y":50},{"x":242,"y":50},{"x":274,"y":50}]}]

До сих пор я был в состоянии пройти это далеко:

{"positions":[{"x":50,"y":50},{"x":82,"y":50},{"x":114,"y":50},{"x":146,"y":50}]}

Но мне также нужно создать класс с этими позициями. Я не работал над классом, так как сначала попытался распечатать вывод, но я не могу разбить его дальше. Я получаю это сообщение об ошибке:

java.lang.IllegalStateException: это не массив JSON.

И мой код такой:

    JsonParser parser = new JsonParser();
    String ships = request.getParameter("JSONships");
    JsonArray array = parser.parse(ships).getAsJsonArray();

    System.out.println(array.get(0).toString());
    JsonArray array2 = parser.parse(array.get(0).toString()).getAsJsonArray();
    System.out.println(array2.get(0).toString());

Я также пытался сделать это так:

    Gson gson = new Gson() ;
    String lol = (gson.fromJson(array.get(0), String.class));
    System.out.println(lol);

В каком случае я получаю:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидаемая STRING, но была BEGIN_OBJECT

В конце я хочу пройтись по позициям, создавая класс для каждой «позиции», который содержит список с другим классом Position, который имеет int x, y.

Спасибо за ваше время.

1 Ответ

8 голосов
/ 24 марта 2012

Определите ваши классы, и вы получите все, что вам нужно, используя gson:

public class Class1 {
  private int x;
  private List<Class2> elements;
}

И внутренний класс:

public class Class2 {
  private String str1;
  private Integer int2;
}

Теперь вы можете разобрать строку json внешнего класса так:

gson.fromJson(jsonString, Class1.class);

Ваша ошибка при использовании Gson заключается в том, что вы пытаетесь проанализировать сложный объект в String, что невозможно.

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