2012-01-06 2 views
4

J'ai utilisé ce site pendant des années, mais je n'ai jamais posté. Je suis perplexe et j'espère que quelqu'un pourrait m'aider.JSON Parsing pour Android - objets imbriqués?

J'utilise un code très similaire à ce que Slicekick a posté ici JSON parsing app "no data"?, mais n'arrive pas à comprendre comment analyser ce fichier JSON. J'ai modifié ses informations JSON pour refléter le format exact que j'essaye d'analyser pour économiser de l'espace/temps. Comment puis-je analyser les "Résultats" afin que je puisse interroger "Nom" et "Type"? Comme son problème avec "Similaire" et "Info", comment puis-je analyser "Info" et "Résultats" dans le fichier ci-dessous?

Voici un exemple d'un fichier JSON édité dans le format exact J'utilise:

{ 
"head": { 
    "title": "Music", 
    "status": "200" 
}, 
"Info": [ 
    { 
     "Name": "Mos Def", 
     "Type": "music", 
     "Results": [ 
      { 
       "Name": "Talib Kweli", 
       "Type": "music" 
      }, 
      { 
       "Name": "Black Star", 
       "Type": "music" 
      }, 
      { 
       "Name": "Little Brother", 
       "Type": "music" 
      } 
     ] 
    }, 
    { 
     "Name": "Mos Def", 
     "Type": "Vehicles", 
     "Results": [ 
      { 
       "Name": "Chevy", 
       "Type": "Car" 
      }, 
      { 
       "Name": "Ford", 
       "Type": "Car" 
      }, 
      { 
       "Name": "Pontiac", 
       "Type": "Car" 
      } 
     ] 
     } 
    ] 
} 

La partie de mon code qui peut être d'intérêt est:

... Je fais HttpGet ... qui se construit dans un StringBuilder ... crée un JSONObject avec les résultats de StringBuilder

jArray = new JSONObject(result); 

... puis retourne que

Puis sur ...

JSONArray Info = json.optJSONArray("Info"); 

    System.out.println("HERE IS INFO: "); 
    System.out.println(Info); 
    //System.out.println("HERE IS RESULTS: "); 
    //System.out.println(Results); 

Et au fond ici est là où je suis perplexe. J'ai mis dans les messages d'impression pour essayer de réduire le problème.

Parsing "Info" me permet de chercher: "Nom": "Mos Def" "Type": "la musique" -et- "Nom": "Mos Def" "Type": "Véhicules"

Remplacer la recherche de "Info" par "Résultats" ne me donne aucune donnée. (Non trouvé)

Des idées?

+0

personne ne pour u code, u besoin de le faire par urself. – Richa

+0

Je ne cherchais pas de codeur. Était à la recherche d'une personne avec un indice ou une idée pour me diriger dans la bonne direction. – Monty

Répondre

1

Vous devez appeler votre code d'analyse syntaxique comme ci-dessous:

jArray = new JSONObject(result); 
for(int i=0;i<jArray.length();i++) 
{ 
    JSONArray Info = json.optJSONArray("Info"); 
    for(int j=0;j<Info.length();j++){ 
    { 
     System.out.println("HERE IS INFO: "); 
     System.out.println(Info); 
     //System.out.println("HERE IS RESULTS: "); 
     JSONObject obj=Info.getJSONObject(j); 
     JSONArray results=obj.getJSONArray("Results"); 
     for(int k=0; k<results.length(); 
     { 
      //Process Results 
     } 
} 
+0

Est-ce que cela donnera la sortie? Je ne pense pas parce que Results est dans un objet JSONObject et que vous essayez d'y accéder directement. –

+0

Oui, il peut avoir besoin d'une édition, et j'ai édité posté en conséquence, mais ce n'est pas encore le code compilé. – jeet

+0

En lisant votre réponse et la réponse de Lalit, j'ai pu mettre quelque chose ensemble qui a fait fonctionner. Je vous remercie beaucoup d'avoir pris le temps de poster! Je vais poster la solution de travail que j'ai fini avec si vous pensez que cela peut aider n'importe qui. – Monty

4

C'est sûr car Results est un JSONArray dans le JSONArray Info. Donc, vous devriez essayer quelque chose comme ça,

JSONArray Info = json.optJSONArray("Info"); 
JSONArray Results = null; 
for (int i = 0; i < array.length(); i++) { 
      JSONObject object = Info.getJSONObject(i); 
      Results results = object.getJSONArray("Results"); 
     } 
+0

Merci beaucoup pour cette réponse. C'est tout ce dont j'avais vraiment besoin, c'était un petit indice. En utilisant ce que vous avez posté et ce que Jitendra a posté - je l'ai maintenant compris. Merci encore! Je posterai ce qui a finalement fonctionné si vous pensez que cela pourrait aider quelqu'un d'autre. – Monty

+0

@lalit Bro Je suis également confronté à un problème d'analyse JSON. J'ai reçu JsonException quand je crée JsonObject, voici le lien vers ma question. (QUESTION) [http://stackoverflow.com/questions/17523805/json-exception-type-mismatch/17523993?noredirect=1#17523993] Veuillez nous aider – Naruto

0

Une meilleure utilisation GSON, son de JSON Google et l'analyse syntaxique en utilisant c'est morceau de gâteau .. !! Voici un bon tutoriel pour démarrer, vous serez plus heureux en utilisant GSON.

Link for GSON tutorial

+0

Merci pour la réponse. J'ai lu à ce sujet et encore peut-être vérifier bientôt. J'ai eu des problèmes pour essayer d'importer le fichier jar pour une raison quelconque, donc je suis passé à autre chose (j'ai continué à essayer de comprendre les bibliothèques JSON incluses.) – Monty

+0

télécharger gson depuis http://code.google.com/p/google-gson/downloads/list , et une fois téléchargé, créez un dossier "lib" dans votre projet droid, puis déplacez-le là, après avoir fait un clic droit sur les propriétés du projet dans eclipse et ajouté la bibliothèque, c'est tout! – kaibuki

+0

Merci, Kaibuki. Je vais essayer. – Monty