100 votes

Comment convertir une chaîne de caractères en un objet Json à l'aide de la bibliothèque gson ?

Veuillez me conseiller sur la manière de convertir un String a JsonObject en utilisant gson bibliothèque.

Ce que je fais sans succès :

String string = "abcde";
Gson gson = new Gson();
JsonObject json = new JsonObject();
json = gson.toJson(string); // Can't convert String to JsonObject

182voto

eadjei Points 1938

Vous pouvez le convertir en un JavaBean si vous le souhaitez en utilisant :

 Gson gson = new GsonBuilder().setPrettyPrinting().create();
 gson.fromJson(jsonString, JavaBean.class)

Pour utiliser JsonObject, qui est plus flexible, utilisez ce qui suit :

String json = "{\"Success\":true,\"Message\":\"Invalid access token.\"}";
JsonParser jsonParser = new JsonParser();
JsonObject jo = (JsonObject)jsonParser.parse(json);
Assert.assertNotNull(jo);
Assert.assertTrue(jo.get("Success").getAsString());

Ce qui est équivalent à ce qui suit :

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();

0 votes

"Assert" sont les trucs supplémentaires, c'est pour le test.

11 votes

Cette réponse répond en fait à la question posée.

5 votes

JsonParser.parse(json).getAsJsonObject() ;

46voto

user2285078 Points 471

Pour le faire d'une manière plus simple, considérez ce qui suit :

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();

3 votes

Vous devriez probablement noter que ceci a été précédemment posté comme commentaire sur une autre réponse.

3 votes

Désolé, mais sans le format de code ce commentaire est hors sujet et celui-ci est en fait une meilleure réponse que les autres

32voto

CalvinChe Points 321
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Je fais ça, et ça a marché.

29voto

Matt Ball Points 165937

Vous n'avez pas besoin d'utiliser JsonObject . Vous devriez utiliser Gson pour convertir les chaînes JSON et vos propres objets Java.

Voir le Guide d'utilisation de Gson :

(Sérialisation)

Gson gson = new Gson();
gson.toJson(1);                   // prints 1
gson.toJson("abcd");              // prints "abcd"
gson.toJson(new Long(10));        // prints 10
int[] values = { 1 };
gson.toJson(values);              // prints [1]

(Désérialisation)

int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String anotherStr = gson.fromJson("[\"abc\"]", String.class)

38 votes

Mais j'ai besoin d'utiliser JsonObject.

0 votes

@Android : pourquoi pensez-vous cela ?

3 votes

Parce qu'une méthode de ma classe doit retourner JsonObject.

8voto

Triguna Points 29

Il semble que la réponse ci-dessus n'ait pas répondu complètement à la question.

Je pense que vous cherchez quelque chose comme ci-dessous :

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

TransactionResponse = new Gson().fromJson(response, TransactionResponse.class);

où ma réponse est quelque chose comme ça :

{"Success":false,"Message":"Invalid access token.","Response":null}

Comme vous pouvez le constater, le nom de la variable doit être identique à la représentation en chaîne Json de la clé dans la paire clé-valeur. Cela convertira automatiquement votre chaîne gson en JsonObject.

1 votes

Pourquoi utiliser les majuscules sur les variables membres ? Pourquoi utilisez-vous le modificateur d'accès par défaut ? Si vous voulez que la réponse soit en majuscule, utilisez la fonction @SerializedName("Success") par exemple, à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X