So konvertieren Sie einen String mithilfe der gson-Bibliothek in JsonObject

91

Bitte Beratung , wie eine konvertieren , Stringum JsonObjectmit gsonBibliothek.

Was ich erfolglos mache:

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

Antworten:

30

Sie müssen nicht verwenden JsonObject. Sie sollten Gson verwenden, um in / von JSON-Zeichenfolgen und Ihre eigenen Java-Objekte zu konvertieren.

Siehe das Gson-Benutzerhandbuch :

(Serialisierung)

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]

(Deserialisierung)

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
quelle
36
Aber ich muss JsonObject verwenden.
Eugene
3
weil eine Methode meiner Klasse JsonObject zurückgeben sollte.
Eugene
3
@ Android: ... warum? JsonObjectist eine Zwischendarstellung. In 99% der Anwendungsfälle sollten Sie sich wirklich nur darum kümmern, Ihre Daten als Java-Objekt oder als JSON-haltige Zeichenfolge darzustellen.
Matt Ball
93
Sie beantworten die Frage nicht :) Es gibt natürlich Fälle, in denen Sie tatsächlich einen String in ein JsonObject konvertieren müssen.
Olof Larsson
3
@MattBall In der Ion-http-Bibliothek ( github.com/koush/ion ) gibt es eine Funktion zum Festlegen des Hauptteils einer http-Anforderung auf ein JsonObject.
Gagege
169

Sie können es in eine JavaBean konvertieren, wenn Sie Folgendes verwenden möchten:

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

Verwenden Sie Folgendes, um JsonObject zu verwenden, das flexibler ist:

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

Welches entspricht dem Folgenden:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
eadjei
quelle
"Assert" sind die zusätzlichen Dinge, die zu Testzwecken dienen.
Paresh Mayani
9
Diese Antwort beantwortet die gestellte Frage tatsächlich.
Janik Zikovsky
5
jsonParser.parse (json) .getAsJsonObject ();
Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject();undAssert.assertTrue(jo.get("Success").getAsBoolean());
smac89
44

Um dies auf einfachere Weise zu tun, beachten Sie Folgendes:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
user2285078
quelle
3
Sie sollten wahrscheinlich beachten, dass dies zuvor als Kommentar zu einer anderen Antwort gepostet wurde.
Nathan Tuggy
3
Sorry, aber ohne Code-Format .. dieser Kommentar ist unscharf .. und dieser ist tatsächlich eine bessere Antwort als andere
Ankit Bansal
27
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

Ich mache das und es hat funktioniert.

CalvinChe
quelle
8

Anscheinend hat die obige Antwort die Frage nicht vollständig beantwortet.

Ich denke, Sie suchen etwas wie das Folgende:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

wo meine Antwort so etwas ist:

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

Wie Sie sehen können, sollte der Variablenname mit der Json-Zeichenfolgendarstellung des Schlüssels im Schlüsselwertpaar übereinstimmen. Dadurch wird Ihre gson-Zeichenfolge automatisch in JsonObject konvertiert.

Triguna
quelle
1
Warum verwenden Sie Großbuchstaben für Mitgliedsvariablen? Warum verwenden Sie den Standardzugriffsmodifikator? Wenn Sie in der Antwort Großbuchstaben wünschen, verwenden Sie @SerializedName("Success")stattdessen beispielsweise.
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
quelle
4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);
Trinadh Koya
quelle
3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");
Udhaya
quelle
0

Beachten Sie, dass ab Gson 2.8.6 die Instanzmethode JsonParser.parseveraltet und durch eine statische Methode ersetzt wurde JsonParser.parseString:

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