J'essaie de remplir mon JSONObject comme ceci:
JSONObject json = new JSONObject();
json.put("Command", "CreateNewUser");
json.put("User", user);
user
est une instance d'une classe de base contenant des champs tels que "Prénom", "Nom", etc.
On dirait que je me trompe, parce que JSON ressemble à ceci:
{
"Command":"CreateNewUser",
"User":"my.package.name.classes.User@2686a150"
}
au lieu de "arbre".
Quel est le problème avec mon code?
Puisque vous utilisez JSONObject
pour représenter des types non primitifs, toute instance passée à JSONObject.put(Object, Object)
générera des éléments imbriqués (ou trees ).
JSONObject main = new JSONObject();
main.put("Command", "CreateNewUser");
JSONObject user = new JSONObject();
user.put("FirstName", "John");
user.put("LastName", "Reese");
main.put("User", user);
{
"User": {
"FirstName": "John",
"LastName": "Reese"
},
"Command": "CreateNewUser"
}
Le framework que vous utilisez ne sait pas comment convertir votre objet User en Map, utilisé en interne en tant que représentation JSON. Il utilise donc la méthode standard 'toString' que vous n'avez pas remplacée.
Exportez simplement toutes les propriétés (par exemple, la méthode d'écriture 'Map toMap ()' sur votre type d'utilisateur) de votre utilisateur vers une carte (toutes les valeurs doivent être des types JDK standard) et placez cette carte dans votre objet json:
json.put("User", user.toMap())
Cela fera l'affaire.
Cela fera ce que vous voulez!
JSONObject json = new JSONObject();
json.put("Command", "CreateNewUser");
json.put("User", new JSONObject(user));
De http://developer.Android.com/reference/org/json/JSONObject.html#put
public JSONObject put (String name, Object value)
Paramètres value a JSONObject, JSONArray, String, Boolean, Integer, Long, Double, NULL ou null. Ne peut être ni NaN ni infini.
Bien que votre user
soit une sous-classe de Object
, ce n'est pas le type attendu par la méthode put
.
L'implémentation de JSONObject
dans le SDK Android semble manquer d'une méthode put(Java.lang.String key, Java.util.Map value)
(à partir du même lien ci-dessus). Vous devrez peut-être ajouter une méthode toMap()
dans votre classe user
pour la convertir en HashMap
. Enfin, utilisez json.put("user", new JSONObject(user.toMap()));
Vous pouvez le résoudre en utilisant plus rapide ObjectMapper.
ObjectMapper o = new ObjectMapper();
String userJsonString = o.readValueAsString(user);
JSONObject jsonObj = new JSONObject();
jsonObj.put("Command", "CreateNewUser");
jsonObj.put("User", new JSONObject(userJsonString));
Vous obtiendrez la sortie suivante:
{
"User": {
"FirstName": "John",
"LastName": "Reese"
},
"Command": "CreateNewUser"
}