Comment convertir une chaîne en JsonObject à l'aide de la bibliothèque gson

91

S'il vous plaît des conseils comment convertir un Stringà l' JsonObjectaide de la gsonbibliothè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
Eugène
la source

Réponses:

28

Vous n'avez pas besoin d'utiliser JsonObject. Vous devez utiliser Gson pour convertir vers / depuis des chaînes JSON et vos propres objets Java.

Consultez le guide de l'utilisateur 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)
Matt Ball
la source
36
Mais j'ai besoin d'utiliser JsonObject.
Eugene
3
car une méthode de ma classe doit retourner JsonObject.
Eugene
3
@Android: ... pourquoi? JsonObjectest une représentation intermédiaire. Dans 99% des cas d'utilisation, vous ne devriez vraiment vous soucier que de représenter vos données en tant qu'objet Java ou en tant que chaîne contenant JSON.
Matt Ball
95
Vous ne répondez pas à la question :) Il y a bien sûr des cas où vous avez réellement besoin de convertir une String en JsonObject.
Olof Larsson
3
@MattBall Dans la bibliothèque Ion http ( github.com/koush/ion ), il y a une fonction pour définir le corps d'une requête http sur un JsonObject.
Gagege
169

Vous pouvez le convertir en 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 équivaut à ce qui suit:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
eadjei
la source
"Assert" sont les trucs supplémentaires, c'est à des fins de test.
Paresh Mayani
9
Cette réponse répond en fait à la question posée.
Janik Zikovsky
5
jsonParser.parse (json) .getAsJsonObject ();
Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject();etAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
44

Pour le faire de manière plus simple, considérez ci-dessous:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
user2285078
la source
3
Vous devriez probablement noter que cela a été précédemment publié en tant que commentaire sur une autre réponse.
Nathan Tuggy
3
Désolé mais sans format de code .. ce commentaire est flou .. et celui-ci est en fait une meilleure réponse que d'autres
Ankit Bansal
28
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é.

CalvinChe
la source
8

On dirait que la réponse ci-dessus n'a 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 ceci:

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

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

Triguna
la source
1
Pourquoi utilisez-vous des majuscules sur les variables membres? Pourquoi utilisez-vous le modificateur d'accès par défaut? Si vous voulez des majuscules dans la réponse, utilisez @SerializedName("Success")par exemple à la place.
Simon Zettervall
7
String emailData = {"to": "[email protected]","subject":"User details","body": "The user has completed his training"
}

// Java model class
public class EmailData {
    public String to;
    public String subject;
    public String body;
}

//Final Data
Gson gson = new Gson();  
EmailData emaildata = gson.fromJson(emailData, EmailData.class);
BAIJU SHARMA
la source
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Trinadh Koya
la source
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Udhaya
la source
1

Notez qu'à partir de Gson 2.8.6 , la méthode d'instance JsonParser.parsea été déconseillée et remplacée par la méthode statique JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Les chrétiens.
la source