Cómo convertir una cadena a JsonObject usando la biblioteca gson

91

Por favor, consejos sobre cómo convertir una Stringpara JsonObjectel uso de gsonla biblioteca.

Lo que hago sin éxito:

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

Respuestas:

28

No necesitas usar JsonObject. Debería utilizar Gson para convertir a / desde cadenas JSON y sus propios objetos Java.

Consulte la Guía del usuario de Gson :

(Publicación por entregas)

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]

(Deserialización)

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
fuente
36
Pero necesito usar JsonObject.
Eugene
3
porque un método de mi clase debería devolver JsonObject.
Eugene
3
@Android: ... ¿por qué? JsonObjectes una representación intermedia. En el 99% de los casos de uso, solo debería preocuparse por representar sus datos como un objeto Java o como una cadena que contiene JSON.
Matt Ball
95
No responde a la pregunta :) Por supuesto, hay casos en los que realmente necesita convertir un String en un JsonObject.
Olof Larsson
3
@MattBall En la biblioteca http de Ion ( github.com/koush/ion ) hay una función para establecer el cuerpo de una solicitud http en un JsonObject.
Gagege
169

Puede convertirlo en un JavaBean si lo desea usando:

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

Para usar JsonObject, que es más flexible, use lo siguiente:

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

Que es equivalente a lo siguiente:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
eadjei
fuente
"Afirmar" son las cosas adicionales, es para fines de prueba.
Paresh Mayani
9
Esta respuesta en realidad responde a la pregunta tal como se hizo.
Janik Zikovsky
5
jsonParser.parse (json) .getAsJsonObject ();
Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject();yAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
44

Para hacerlo de una manera más sencilla, considere a continuación:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
usuario2285078
fuente
3
Probablemente debería tener en cuenta que esto se publicó anteriormente como un comentario en otra respuesta.
Nathan Tuggy
3
Lo siento, pero sin formato de código ... ese comentario está desenfocado ... y esta es en realidad una mejor respuesta que otras
Ankit Bansal
28
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Hago esto y funcionó.

CalvinChe
fuente
8

Parece que la respuesta anterior no respondió la pregunta por completo.

Creo que estás buscando algo como a continuación:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

donde mi respuesta es algo como esto:

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

Como puede ver, el nombre de la variable debe ser el mismo que la representación de cadena Json de la clave en el par clave-valor. Esto convertirá automáticamente su cadena gson a JsonObject.

Triguna
fuente
1
¿Por qué usa mayúsculas en las variables miembro? ¿Por qué utiliza el modificador de acceso predeterminado? Si desea mayúsculas en la respuesta, utilice, @SerializedName("Success")por ejemplo, en su lugar.
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
fuente
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Trinadh Koya
fuente
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Udhaya
fuente
1

Tenga en cuenta que a partir de Gson 2.8.6 , el método de instancia JsonParser.parseha quedado obsoleto y se reemplazó por el método estático JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Christian S.
fuente