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

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)

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();

"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();

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é.


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.


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": "abc@abctest.com","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);

4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);

3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");

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();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.