validate simple parse java json gson

simple - string to json java spring



Gson: Convierte directamente String a JsonObject(no POJO) (8)

Acabo de encontrar el mismo problema. Puede escribir un deserializador personalizado trivial para la clase JsonElement :

import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; GsonBuilder gson_builder = new GsonBuilder(); gson_builder.registerTypeAdapter( JsonElement.class, new JsonDeserializer<JsonElement>() { @Override public JsonElement deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { return arg0; } } ); String str = "{ /"a/": /"A/", /"b/": true }"; Gson gson = gson_builder.create(); JsonElement element = gson.fromJson(str, JsonElement.class); JsonObject object = element.getAsJsonObject();

Parece que no puedo resolver esto. Estoy intentando manipular el árbol JSON en GSON, pero tengo un caso en el que no sé o tengo un POJO para convertir una cadena, antes de convertir a JsonObject . ¿Hay una manera de ir directamente de una String a JsonObject ?

He intentado lo siguiente (sintaxis de 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 solo como JsonString , y b devuelve un JsonObject vacío.

¿Algunas ideas?


Creo que este es un enfoque más fácil:

public class HibernateProxyTypeAdapter implements JsonSerializer<HibernateProxy>{ public JsonElement serialize(HibernateProxy object_, Type type_, JsonSerializationContext context_) { return new GsonBuilder().create().toJsonTree(initializeAndUnproxy(object_)).getAsJsonObject(); // that will convert enum object to its ordinal value and convert it to json element } public static <T> T initializeAndUnproxy(T entity) { if (entity == null) { throw new NullPointerException("Entity passed for initialization is null"); } Hibernate.initialize(entity); if (entity instanceof HibernateProxy) { entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer() .getImplementation(); } return entity; } }

Y entonces podrás llamarlo así:

Gson gson = new GsonBuilder() .registerTypeHierarchyAdapter(HibernateProxy.class, new HibernateProxyTypeAdapter()) .create();

De esta manera todos los objetos de hibernación se convertirán automáticamente.


La forma más sencilla es usar la clase JsonPrimitive , que se deriva de JsonElement , como se muestra a continuación:

JsonElement element = new JsonPrimitive(yourString); JsonObject result = element.getAsJsonObject();


Llegó a través de un escenario con la 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).
Un enfoque similar a lo que se presenta anteriormente para una cadena simple, solo necesita la conversión a JsonArray primero antes de JsonObject.

Cadena del cliente: [{"propiedad": "COLUMN_NAME", "dirección": "ASC"}]

String jsonIn = "[{/"property/":/"COLUMN_NAME/",/"direction/":/"ASC/"}]"; JsonArray o = (JsonArray)new JsonParser().parse(jsonIn); String sortColumn = o.get(0).getAsJsonObject().get("property").getAsString()); String sortDirection = o.get(0).getAsJsonObject().get("direction").getAsString());


Trate de usar getAsJsonObject () en lugar de un lanzamiento directo utilizado en la respuesta aceptada:

JsonObject o = new JsonParser().parse("{/"a/": /"A/"}").getAsJsonObject();


utilizar JsonParser; por ejemplo:

JsonParser parser = new JsonParser(); JsonObject o = parser.parse("{/"a/": /"A/"}").getAsJsonObject();


//import com.google.gson.JsonObject; JsonObject complaint = new JsonObject(); complaint.addProperty("key", "value");


String jsonStr = "{/"a/": /"A/"}"; Gson gson = new Gson(); JsonElement element = gson.fromJson (jsonStr, JsonElement.class); JsonObject jsonObj = element.getAsJsonObject();