2012-05-22 8 views
0

Je suis assez nouveau dans l'analyseur JSON et j'essaie d'extraire tous les fichiers de la balise "sizes" ie extraire les valeurs (small, yes, xsmall, NO, Medium et yes) du fichier JSON dans une boucle imbriquée complexe mais ne fonctionne pas. J'utilise GSON pour analyser le fichier JSON et en utilisant JAVA comme langage de programmationExtraire toutes les valeurs de JSON imbriqué

Voici comment le fichier JSON ressemble en général

{ response: "ok", 
    prodinfo: { 
    sizes: [ 
     { size:"small", 
     available: "yes" 
     }, 
     { size:"xsmall", 
     available: "No" 
     }, 
     { size:"Medium", 
     available: "yes" 
     } 
    ] 
    } 
} 

C'est ce que je l'ai fait

int array = jsonParser14.parse(json14).getAsJsonObject().get("ProdInfo").getAsJsonObject().getAsJsonArray("sizes").size(); 
JsonArray sizes = (JsonArray) jsonParser15.parse(json15).getAsJsonObject().get("ProdInfo").getAsJsonObject().getAsJsonArray("sizes"); 
for (int i = 0; i <= array; i++) { 
    String size = sizes.get(i).getAsString(); 
    System.out.println("data extracted are: " + size); 
} 

Votre aide être apprécié. Merci

+1

Montrez votre boucle aussi. – Jivings

+0

Avez-vous construit des classes dans lesquelles stocker ces données? Si oui, vous n'avez pas besoin d'une boucle. Il y a plusieurs façons de le faire, montrez-nous ce que vous avez essayé. –

+0

Bonjour les gars. Je viens d'ajouter l'analyseur et la boucle GSON que j'ai fait. Toute idée sera appréciée. – sgamer

Répondre

0

Quelque chose comme:

var sizes = json.prodinfo.sizes; 
for (item in sizes) { 
    if (sizes.hasOwnProperty(item)) { 
     var isAvailable = sizes[item].available; 
     alert(isAvailable); 
    } 

}​ 

Exemple ici: http://jsfiddle.net/nG88B/3/

Modifier: On dirait que vous avez besoin pour analyser la première JSON. Dans ce cas (si elle est valide) que vous pouvez faire:

var obj = JSON.parse(jsonStr); 
+0

OP tente d'analyser en Java en utilisant gson. –

1

Je habituellement traiter ce en faisant une classe publique avec les champs obligatoires:

public class ProdSize { 
    public String size; 
    public String available; 
} 

public class ProdInfo { 
    public ProdSize[] sizes; 
} 

public class Message { 
    public String response; 
    public ProdInfo prodinfo; 
} 

Et puis je dois juste faire en gson:

Gson gson = new GsonBuilder().create(); 
Message mess = gson.fromJson(theJsonString, Message.class); 

Ensuite, je n'ai aucune boucle à faire pour analyser le JSON. J'ai directement mes tailles

mess.prodinfo.sizes 

Par exemple, vous pouvez les imprimer comme ce

for (int i=0; i<mess.prodinfo.sizes.length; i++) { 
    ProdSize size = mess.prodinfo.sizes[i]; 
    System.out.println("Size " + size.size + " -> " + size.available); 
} 
+0

Bonjour dystroy. merci pour la réponse mais cependant je ne peux pas extraire chaque champ dans les tailles de votre idée. Serait-il possible de me montrer comment vous faites cela? En ce moment quand je cours en dessous du code je reçois la sortie sous "[Lgsonparser $ ProdSize; @ 787171" \t \t JsonParser jsonParser = nouveau JsonParser(); FileReader json = new FileReader ("h: \\ test.json") \t \t \t \t JsonElement theJsonString = jsonParser.parse (json); \t \t Gson gson = nouveau GsonBuilder(). Create(); \t \t Message mess = gson.fromJson (theJsonString, Message.class); \t \t System.out.println (mess.prodinfo.sizes); \t} \t \t \t}} \t – sgamer

+0

J'ai terminé ma réponse avec une boucle pour montrer comment vous pouvez itérer. –

+0

Merci beaucoup.Très apprécié – sgamer

Questions connexes