2013-10-07 4 views
3

Je suis en train d'analyser un objet JSON comme suit avec GSON:GSON: Impossible analyser correctement l'objet JSON

{ 
"key1":"someValue", 
"key2":{ 
      "anotherKey1":"212586425", 
      "anotherKey2":"Martin" 
     } 
} 

Voici le code:

Data data = new Gson().fromJson(json, Data.class); 

Voici la classe Data:

public class Data { 

     public String key1; 
     public Map key2; //This will break everything. 
} 

ce que je pense (je suis nouveau à GSON) est qu'elle produit la valeur de key2 comme Map objet.

Cependant, j'obtiens une erreur Expected BEGIN_OBJECT but was STRING qui me fait penser que je passe un String, où je devrais passer un objet JSON.

GSON n'analyse-t-il pas toute la chaîne JSON que j'ai passée au début? Donc finalement, je voudrais que la nouvelle source de données soit un objet Map. Est-ce faisable?

+1

Cela fonctionne parfaitement bien pour moi. Êtes-vous sûr d'utiliser le bon JSON? –

+0

@SotiriosDelimanolis Strange. La structure est complètement identique dans mon objet JSON. Vous ne pouvez pas le faire fonctionner ... –

+0

Pouvez-vous imprimer le JSON que vous essayez d'analyser? –

Répondre

0

Laissez Gson faire le travail. Je définissais Data comme

package stackoverflow.questions.q19228349; 

public class Data { 

    @Override 
    public String toString() { 
     return "Data [key1=" + key1 + ", key2=" + key2 + "]"; 
    } 
    public String key1; 
    public Object key2; 

} 

et je peux parse les deux cas pour key2:

package stackoverflow.questions.q19228349; 

import com.google.gson.Gson; 

public class Q19228349 { 


    public static void main(String[] args){ 
    String json = 
      "{\"key1\":\"someValue\","+ 
      "\"key2\":{ "+ 
      "   \"anotherKey1\":\"212586425\","+ 
      "   \"anotherKey2\":\"Martin\""+ 
      "  }"+ 
      " }"; 

    String json2 = 
      "{\"key1\":\"someValue\","+ 
      "\"key2\":\"aString\""+ 
      " }"; 

     Gson g = new Gson(); 
     Data d = g.fromJson(json, Data.class); 
     System.out.println("First: " +d); 

     Data d2 = g.fromJson(json2, Data.class); 
     System.out.println("Second: "+d2); 
    } 


} 

Ceci est le résultat:

Première: Les données [key1 = someValue, key2 = { anotherKey1 = 212586425, anotherKey2 = Martin}] Deuxième: Données [clé1 = certaineValeur, clé2 = aString]

Questions connexes