2012-05-29 3 views
1

Lorsque j'appelle le serveur, sa réponse est basée sur l'objet json. En fait, je sais analyser l'objet JSON mais cette réponse est étrange pour moi. La réponse du serveur est:Android, analyse l'objet JSON

{"body":"Not Available!","clazz":"SoccerMatchPreview","id":{"inc":-2024241794,"machine":415106952,"new":false,"time":1337861978000,"timeSecond":1337861978},"publishedDate":"2012-06-08 17:00:00 +0100","refKey":"SoccerMatchPreview_4fb897be18be8b87f9117595","title":"Poland vs Greece"} 

Les informations dont j'ai besoin sont body, publishedDate, refKey et title. Le code que je l'ai envoyée par écrit de l'objet JSON est le suivant:

JSONObject jObject = new JSONObject(response); 
        JSONArray contestantObjects = jObject.getJSONArray("id"); 
        for(int i=0; i<contestantObjects.length(); i++) { 
         mPreview.setBody(contestantObjects.getJSONObject(i).getString("body").toString()); 
         mPreview.setPublishedDate(contestantObjects.getJSONObject(i).getString("publishedDate").toString()); 
         mPreview.setRefKey(contestantObjects.getJSONObject(i).getString("refKey").toString()); 
         mPreview.setTitle(contestantObjects.getJSONObject(i).getString("title").toString()); 
        } 

Mais parce qu'il n'a pas « [] » Je pense que ce n'est pas objet JSON. par conséquent, j'ai écrit un autre tableau JSON basé sur un code.

JSONArray contestantObjects = new JSONArray(response); 
        for(int i=0; i<contestantObjects.length(); i++) { 
         mPreview.setBody(contestantObjects.getJSONObject(i).getString("body").toString()); 
         mPreview.setPublishedDate(contestantObjects.getJSONObject(i).getString("publishedDate").toString()); 
         mPreview.setRefKey(contestantObjects.getJSONObject(i).getString("refKey").toString()); 
         mPreview.setTitle(contestantObjects.getJSONObject(i).getString("title").toString()); 
        } 

mais le résultat est le même et Logcat montre:

valeur { "id": { "timeSecond": 1337861978, "temps": 1337861978000, "nouveau": false, "machine": 415106952, "inc": - 2024241794}, "body": "Not Available!", "Title": "Pologne contre la Grèce", "publishedDate": "2012-06-08 17:00:00 +0100", " clazz ":" SoccerMatchPreview », "refKey": "SoccerMatchPreview_4fb897be18be8b87f9117595"} de type org.json.JSONObject ne peut pas être converti en JSONArray

toute suggestion serait appréciée. Merci

Répondre

4
JSONArray contestantObjects = jObject.getJSONArray("id"); 

Votre erreur est ici, id lui-même est un objet complexe, pas un tableau.

"id":{"inc":-2024241794,"machine":415106952,"new":false,"time":1337861978000,"timeSecond":1337861978} 

Par conséquent, après avoir reçu le id objet JSON, vous devriez être en mesure d'obtenir les attributs individuels, par exemple inc, machine, new, time et timeSecond.

JSONObject idObject = ...getJSONObject("id"); 
String machine = idObject.get("machine"); 

Une structure de données de tableau JSON aurait ressemblé à ceci: [] signifie un tableau.

Par exemple, "Animals":["Pig", "Cat", "Dog"].

Dans un autre exemple, il peut également s'agir d'un tableau d'objets complexes, "Animals":[{"name":"AAA", "blood":"A"}, {"name":"BBB", "blood":"B"}].

EDIT: Voici un bon visualiseur JSON que je recommanderais.

http://jsonviewer.stack.hu/

enter image description here

+0

Merci cher Chin, basé sur ce que vous avez mentionné que je l'ai trouvé « id » est mauvaise clé parce que je ne ai pas besoin de ses éléments. Comment obtenir le corps, publishedDate, refKey et le titre? Sur la base de quoi, devrais-je devoir analyser la chaîne de "réponse"? – Hesam

+0

Pour obtenir publishedDate, refKey et title, vous auriez seulement besoin de JSONObject jObject = new JSONObject (response); String publishedDate = jObject.get ("publishedDate"); etc. –

+0

Cette partie, je vous recommande fortement de regarder dans une bonne bibliothèque JSON, GSON de Google semble être un bon. Voici un petit tutoriel: http://java.sg/parsing-a-json-string-into-an-object-with-gson-easily/ –