2014-07-04 1 views
0

Je veux faire une demande de publication avec volley à une API REST. Par conséquent, je crée un objet JSONObject et y place une chaîne JSON générée à partir d'une classe.Requête JSON imbriquée avec Volley -> Caractères évasés

JSONObject jsonObject = new JSONObject(); 
String json = gson.toJson(MyClazz); 
try { 
    jsonObject.put(PARAM, json); 
} 
catch (JSONException e1) { 
    e1.printStackTrace(); 
} 

Le problème est que la chaîne JSON calculée correcte est échappée et ne peut pas être reconnue sur l'extrémité arrière.

Alors toJson() donne quelque chose comme:

{ 
    "device_identifier":"324234234", 
    "name":"NameMe", 
    "list":[ 
     {"prop":"A","prop2":-10}, 
     {"prop":"B","prop2":-12} 
    ] 
} 

La sortie de JSONObject est comme

{ 
    "PARAM":{ 
     \"device_identifier\":\"324234234\", 
     \"name\":\"NameMe\", 
     \"list\":[ 
      {\"prop\":\"A\",\"prop2\":-10}, 
      {\"prop\":\"B\","\prop2\":-12} 
     ] 
    } 
} 

J'ai besoin PARAM pour la structure JSON je ne peux pas donner directement au REST-API . Des idées comment je peux éviter l'échappement supplémentaire?

+0

Si ma réponse était utile, s'il vous plaît accepter en cliquant sur la coche à côté. Voir http://meta.stackexchange.com/a/5235 pour plus de détails. – jstricker

Répondre

0

Vous pouvez envelopper votre objet MyClazz avec un simple objet encapsuleur, puis passer cet objet encapsulé à la méthode toJson de Gson.

Compte tenu de cette classe en fonction de votre exemple JSON,

public class MyClazz { 
    public String device_identifier; 
    public String name; 
    public List<Prop> list; 
    public class Prop { 
     public String prop; 
     public Integer prop2; 
    } 
} 

est ici une implémentation wrapper possible. Notez l'utilisation de com.google.gson.annotations.SerializedName qui indique à Gson d'utiliser la clé PARAM dans la représentation JSON.

public class MyClazzWrapper { 
    public MyClazzWrapper(MyClazz myClazz) { 
     this.myClazz = myClazz; 
    } 
    @SerializedName("PARAM") 
    private MyClazz myClazz; 
} 

Et voici un exemple utilisant:

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 

MyClazz myClazz = gson.fromJson("{\"device_identifier\":\"324234234\",\"name\":\"NameMe\",\"list\":[{\"prop\":\"A\",\"prop2\":-10},{\"prop\":\"B\",\"prop2\":-12}]}", MyClazz.class); 
MyClazzWrapper wrapped = new MyClazzWrapper(myClazz); 

System.out.println(gson.toJson(wrapped)); 

L'impression de volonté ci-dessus:

{ 
    "PARAM": { 
     "device_identifier": "324234234", 
     "name": "NameMe", 
     "list": [ 
      { 
       "prop": "A", 
       "prop2": -10 
      }, 
      { 
       "prop": "B", 
       "prop2": -12 
      } 
     ] 
    } 
}