Come convertire una stringa in JsonObject utilizzando la libreria gson


91

Si prega di consigliare come convertire a Stringin JsonObjectusinggson biblioteca.

Quello che faccio senza successo:

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

Risposte:


30

Non è necessario utilizzare JsonObject . Dovresti usare Gson per convertire in / da stringhe JSON e i tuoi oggetti Java.

Consulta la Guida per l'utente di Gson :

(Serializzazione)

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]

(Deserializzazione)

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
Ma ho bisogno di usare JsonObject.
Eugene

3
perché un metodo della mia classe dovrebbe restituire JsonObject.
Eugene

3
@Android: ... perché? JsonObjectè una rappresentazione intermedia. Nel 99% dei casi d'uso, dovresti davvero preoccuparti solo di rappresentare i tuoi dati come un oggetto Java o come una stringa contenente JSON.
Matt Ball

93
Non rispondi alla domanda :) Ci sono ovviamente casi in cui hai effettivamente bisogno di convertire una stringa in un JsonObject.
Olof Larsson

3
@MattBall Nella libreria http di Ion ( github.com/koush/ion ) c'è una funzione per impostare il corpo di una richiesta http su un JsonObject.
Gagege

169

Puoi convertirlo in JavaBean se vuoi usare:

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

Per utilizzare JsonObject, che è più flessibile, utilizzare quanto segue:

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

Che è equivalente a quanto segue:

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

"Assert" sono le cose extra, è a scopo di test.
Paresh Mayani

9
Questa risposta risponde effettivamente alla domanda come chiesto.
Janik Zikovsky

5
jsonParser.parse (json) .getAsJsonObject ();
Mike

JsonObject jo = jsonParser.parse(json).getAsJsonObject();eAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89

44

Per farlo in modo più semplice, considera di seguito:

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

3
Probabilmente dovresti notare che questo è stato precedentemente pubblicato come commento su un'altra risposta.
Nathan Tuggy

3
Scusa ma senza il formato del codice .. quel commento è sfocato .. e questa è in realtà una risposta migliore di altre
Ankit Bansal

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

Lo faccio e ha funzionato.


8

Sembra che la risposta di cui sopra non abbia risposto completamente alla domanda.

Penso che tu stia cercando qualcosa come di seguito:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

dove la mia risposta è qualcosa del genere:

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

Come puoi vedere, il nome della variabile dovrebbe essere lo stesso della rappresentazione di stringa Json della chiave nella coppia chiave-valore. Questo convertirà automaticamente la tua stringa gson in JsonObject.


1
Perché usi le maiuscole sulle variabili membro? Perché usi il modificatore di accesso predefinito? Se vuoi le maiuscole nella risposta, usa @SerializedName("Success")invece per esempio.
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");

0

Si noti che a partire da Gson 2.8.6 , il metodo di istanza JsonParser.parseè stato deprecato e sostituito dal metodo statico JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.