Parece que no puedo resolver esto. Estoy intentando la manipulación del árbol JSON en GSON, pero tengo un caso en el que no sé o tengo un POJO para convertir una cadena, antes de convertirla JsonObject
. ¿Hay alguna manera de ir directamente de un String
a JsonObject
?
He intentado lo siguiente (sintaxis 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])
pero a
falla, el JSON se escapa y se analiza como JsonString
único, y
b
devuelve un vacío JsonObject
.
¿Algunas ideas?
Respuestas:
use JsonParser; por ejemplo:
fuente
new JsonParser().parse(..).getAsJsonObject();
JsonParser.parseString(str).getAsJsonObject()
.Intente usar en
getAsJsonObject()
lugar de un molde directo usado en la respuesta aceptada:fuente
members
la clave principal. Aquí hay una muestra {"miembros": {"clave1": "13756963814f2c594822982c0307fb81", "clave2": verdadero, "clave3": 123456789}}JsonObject jsonObj = JsonParser.parseString(str).getAsJsonObject()
orGson gson = new Gson(); JsonElement element = gson.fromJson (jsonStr, JsonElement.class); JsonObject jsonObj = element.getAsJsonObject();
fuente
JsonObject
la definición de clase? Proviene de la biblioteca Gson de Google. Puede consultar la documentación aquí .La forma más simple es usar la
JsonPrimitive
clase, que se deriva deJsonElement
, como se muestra a continuación:fuente
Acabo de encontrar el mismo problema. Puede escribir un deserializador personalizado trivial para la
JsonElement
clase:fuente
Creo que este es un enfoque más fácil:
Y luego podrás llamarlo así:
De esta forma, todos los objetos de hibernación se convertirán automáticamente.
fuente
El
JsonParser
constructor ha quedado en desuso. Utilice el método estático en su lugar:fuente
Encontré un escenario con clasificación remota del almacén de datos en EXTJS 4.X donde la cadena se envía al servidor como una matriz JSON (de solo 1 objeto).
Enfoque similar a lo que se presenta previamente para una cadena simple, solo necesita conversión a JsonArray primero antes de JsonObject.
Cadena del cliente: [{"propiedad": "COLUMN_NAME", "direction": "ASC"}]
fuente
fuente