2012-03-24 2 views
3

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

[{"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}]} 

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

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

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

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

ответ

8

Определите свои классы, и вы получите все, что вам нужно, используя 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, что невозможно.

+0

спасибо. Я никогда не думал, что это будет так легко, и я даже не знаю, что я хотел сделать со String. Вы мой герой – user1047833

+0

Привет, возможно ли разобрать сложную строку JSON, созданную на PHP, с использованием смешанных типов данных без создания внутренних классов. На самом деле наш API написан на PHP, и мы используем этот API через java-приложение. – sumit

+0

@sumit: как вы хотите использовать строку JSON? Хотя JSON - это формат объекта в PHP/javascript, как бы вы обращались к свойствам в java? –