Ich kann das nicht herausfinden. Ich versuche, JSON-Bäume in GSON zu manipulieren, aber ich habe einen Fall, in dem ich vor dem Konvertieren in kein POJO kenne oder kein POJO habe, in das ich einen String konvertieren kann JsonObject
. Gibt es einen Weg direkt von a String
nach JsonObject
?
Ich habe Folgendes versucht (Scala-Syntax):
val gson = (new GsonBuilder).create
val a: JsonObject = gson.toJsonTree("""{ "a": "A", "b": true }""").getAsJsonObject
val b: JsonObject = gson.fromJson("""{ "a": "A", "b": true }""", classOf[JsonObject])
a
Wenn dies jedoch fehlschlägt, wird der JSON als JsonString
einziger maskiert und analysiert und
b
gibt einen leeren Wert zurück JsonObject
.
Irgendwelche Ideen?
Antworten:
benutze JsonParser; beispielsweise:
quelle
new JsonParser().parse(..).getAsJsonObject();
JsonParser.parseString(str).getAsJsonObject()
.Versuchen Sie,
getAsJsonObject()
anstelle einer geraden Besetzung zu verwenden, die in der akzeptierten Antwort verwendet wird:quelle
members
übergeordneten Schlüssel umbrochen . Hier ist ein Beispiel {"Mitglieder": {"Schlüssel1": "13756963814f2c594822982c0307fb81", "Schlüssel2": wahr, "Schlüssel3": 123456789}}JsonObject jsonObj = JsonParser.parseString(str).getAsJsonObject()
oderGson gson = new Gson(); JsonElement element = gson.fromJson (jsonStr, JsonElement.class); JsonObject jsonObj = element.getAsJsonObject();
quelle
JsonObject
Klassendefinition? Es stammt aus der Gson-Bibliothek von Google. Die Dokumentation finden Sie hier .Der einfachste Weg ist die Verwendung der
JsonPrimitive
Klasse, von der abgeleitet wirdJsonElement
, wie unten gezeigt:quelle
Ich bin gerade auf das gleiche Problem gestoßen. Sie können einen einfachen benutzerdefinierten Deserializer für die
JsonElement
Klasse schreiben :quelle
Ich glaube, das ist ein einfacher Ansatz:
Und dann können Sie es so nennen:
Auf diese Weise werden alle Objekte im Ruhezustand automatisch konvertiert.
quelle
Der
JsonParser
Konstruktor ist veraltet. Verwenden Sie stattdessen die statische Methode:quelle
Kam über ein Szenario mit Remote-Sortierung des Datenspeichers in EXTJS 4.X, in dem die Zeichenfolge als JSON-Array (von nur 1 Objekt) an den Server gesendet wird.
Ein ähnlicher Ansatz wie zuvor für eine einfache Zeichenfolge, muss erst vor JsonObject in JsonArray konvertiert werden.
Zeichenfolge vom Client: [{"property": "COLUMN_NAME", "direction": "ASC"}]
quelle
quelle