2012-03-24 3 views
3

J'ai du mal à analyser mon fichier JSON que j'obtiens de javascript. Le format JSON est le suivant:Analyse du tableau JSON avec 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}]}] 

Jusqu'à présent, j'ai pu en arriver là:

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

Mais j'ai besoin aussi de créer maintenant une classe avec ces positions. Je n'ai pas travaillé sur la classe, puisque j'ai essayé d'imprimer la sortie en premier, mais je suis incapable de la décomposer davantage. Je reçois ce message d'erreur:

java.lang.IllegalStateException: ce n'est pas un tableau JSON.

Et mon code est le suivant:

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()); 

J'ai aussi essayé de le faire de cette façon:

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

Dans ce cas, je reçois:

com.google.gson. JsonSyntaxException: java.lang.IllegalStateException: STRING attendu mais BEGIN_OBJECT

À la fin, iw ant pour boucler les positions, créant une classe pour chaque "position", qui contient une liste avec une autre position de classe, qui a l'int x, y.

Nous vous remercions de votre temps.

Répondre

8

Définir vos classes et vous obtiendrez tout ce que vous avez besoin en utilisant gson:

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

Et la classe intérieure:

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

Maintenant, vous pouvez analyser une chaîne JSON de la classe externe comme ça :

gson.fromJson(jsonString, Class1.class); 

Votre erreur lors de l'utilisation de Gson est que vous essayez d'analyser un objet complexe dans String, ce qui n'est pas possible.

+0

Merci beaucoup. Je n'ai jamais pensé que ce serait si facile et je ne sais même pas ce que je voulais faire avec la chaîne. Vous êtes mon héros – user1047833

+0

Hi est-il possible d'analyser une chaîne JSON complexe créée en PHP ayant mélangé des types de données sans créer de classe interne. En fait, notre API est écrite en PHP et nous utilisons cette API via une application Java. – sumit

+0

@sumit: comment voulez-vous consommer la chaîne JSON? Alors que JSON est le format d'objet en PHP/javascript, comment accèderiez-vous aux propriétés de java? –