2015-07-28 5 views
0

Mon objet JSON ressemble à ceci:J'utilise JsonReader dans Android, et j'ai besoin d'une valeur à l'intérieur de l'objet en cours avant l'analyse d'un objet interne

{ 
    id: 1 
    object: 
     { 
      object_id:1 
      key_for_1: "value for object type 1" 
     } 
    type: "object_type_1" 
} 

{ 
    id: 2 
    object: 
     { 
      object_id:5 
      key_for_23: "value for object type 23" 
     } 
    type: "object_type_23" 
} 

Donc, en gros j'ai besoin « type » avant de pouvoir analyser l'objet. Y at-il un moyen de s'assurer que je peux saisir la valeur pour "type" avant de saisir "objet"? JsonReader utilise à peu près les mêmes méthodes que GSON. Voici comment je l'analyser:

public CustomObject(JsonReader reader) throws IOException { 
    reader.beginObject(); 
    while (reader.hasNext()) { 

     String name = reader.nextName(); 

     if (name.equals("id")) { 
      clId = reader.nextDouble(); 
     } 

     else if (name.equals("object")) { 
      innerObject = new InnerObject(reader); 
     } 

     else if (name.equals("type")) { 
      type = reader.nextString(); 
     } 
    } 

    reader.endObject(); 
} 

Je ne veux pas simplement utiliser un constructeur de chaîne parce que l'objet JSON réel je reviens est énorme (l'est au-dessus juste un échantillon). J'ai d'abord essayé StringBuilder et je vois pas mal de problèmes de mémoire, c'est pourquoi je voulais passer à JsonReader.

Toute aide serait géniale. Merci

Répondre

1

Tout d'abord, pour simplifier l'analyse de l'objet JSON, vous pouvez utiliser la bibliothèque org.json. Deuxièmement, je pense que c'est une structure d'objet JSON invalide.

Avez-vous l'intention d'avoir un tableau d'objets JSON avec chaque élément (Données dans ce cas) ayant le nom suivant: paires de valeurs?

{ "Data": [ id: 1 objet : { object_id: 5 key_for_23: "valeur pour le type d'objet 23" } Type : "object_type_23" }, {}]

{

}

+0

oui, désolé la structure est pas parfait. Je voulais juste donner un exemple. Fondamentalement, on me donne un tableau d'objets JSON et chacun d'eux a 3 clés (celles ci-dessus). Pour utiliser org.json j'ai besoin de convertir le Json en une chaîne que je voulais éviter – Sree

+0

Quand vous dites que vous avez besoin de le convertir en chaîne, qu'est-ce que cela implique? Parce qu'un objet JSON peut avoir différentes paires clé-valeur, avec les valeurs étant String, integer, boolean etc. Par exemple. { "Montant": 100,50, "âge": 30, "is_adult": true, "name": "foo" } Pour votre tableau d'objets JSON, aurait-il OBJECT_ID pour chaque élément d'objet jsonArray. Parce que je vois 2 identifiants. Si vous pouviez donner un exemple d'un objet Json valide avec des éléments au cas où je serais capable d'hep avec l'analyse. –

+0

Donc, en gros, je récupère la sortie de HTTPUrlConnection (qui est json) et la compile en utilisant un constructeur de chaîne. Ensuite, je nourris la chaîne dans un JSONObject. JSONObject fetchedNewsFeedObjects = new JSONObject (sb.toString()); Donc, je "convertis" le JSON en une chaîne de caractères afin que je puisse le nourrir dans l'objet JSONObject. Cela avait-il du sens? – Sree