Nie mogę tego rozgryźć. Próbuję manipulować drzewem JSON w GSON, ale mam przypadek, w którym nie wiem lub nie mam POJO do konwersji łańcucha, przed konwersją na JsonObject
. Czy istnieje sposób, aby przejść bezpośrednio z String
do JsonObject
?
Próbowałem następujące (składnia Scala):
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])
ale a
kończy się niepowodzeniem, JSON jest usuwany i analizowany jako JsonString
jedyny i
b
zwraca wartość pustą JsonObject
.
Jakieś pomysły?
Odpowiedzi:
użyj JsonParser; na przykład:
źródło
new JsonParser().parse(..).getAsJsonObject();
JsonParser.parseString(str).getAsJsonObject()
.Spróbuj użyć
getAsJsonObject()
zamiast prostej obsady użytej w zaakceptowanej odpowiedzi:źródło
members
klucz nadrzędny. Oto przykład {„członkowie”: {„klucz1”: „13756963814f2c594822982c0307fb81”, „klucz2”: prawda, „klucz3”: 123456789}}JsonObject jsonObj = JsonParser.parseString(str).getAsJsonObject()
lubGson gson = new Gson(); JsonElement element = gson.fromJson (jsonStr, JsonElement.class); JsonObject jsonObj = element.getAsJsonObject();
źródło
JsonObject
definicję klasy? Pochodzi z biblioteki Google Gson. Możesz zapoznać się z dokumentacją tutaj .Najprostszym sposobem jest użycie
JsonPrimitive
klasy, z której wywodzi sięJsonElement
, jak pokazano poniżej:źródło
Właśnie napotkałem ten sam problem. Możesz napisać trywialny niestandardowy deserializator dla
JsonElement
klasy:źródło
Uważam, że jest to łatwiejsze podejście:
A potem będziesz mógł to nazwać w ten sposób:
W ten sposób wszystkie hibernowane obiekty zostaną przekonwertowane automatycznie.
źródło
JsonParser
Konstruktor została zaniechana. Zamiast tego użyj metody statycznej:źródło
Wystąpił w scenariuszu ze zdalnym sortowaniem magazynu danych w EXTJS 4.X, gdzie ciąg jest wysyłany do serwera jako tablica JSON (tylko 1 obiekt).
Podobne podejście do tego, co zostało przedstawione wcześniej dla prostego ciągu, wystarczy przekonwertować na JsonArray najpierw przed JsonObject.
Ciąg od klienta: [{„property”: „COLUMN_NAME”, „direction”: „ASC”}]
źródło
źródło