Quiero poder acceder a las propiedades desde una cadena JSON dentro de mi método de acción Java. La cadena está disponible simplemente diciendo myJsonString = object.getJson()
. A continuación se muestra un ejemplo del aspecto que puede tener la cadena:
{
'title': 'ComputingandInformationsystems',
'id': 1,
'children': 'true',
'groups': [{
'title': 'LeveloneCIS',
'id': 2,
'children': 'true',
'groups': [{
'title': 'IntroToComputingandInternet',
'id': 3,
'children': 'false',
'groups': []
}]
}]
}
En esta cadena, cada objeto JSON contiene una matriz de otros objetos JSON. La intención es extraer una lista de ID donde cualquier objeto dado que posee una propiedad de grupo que contiene otros objetos JSON. Miré el Gson de Google como un posible complemento JSON. ¿Alguien puede ofrecer alguna forma de orientación sobre cómo puedo generar Java a partir de esta cadena JSON?
Respuestas:
Google Gson admite genéricos y beans anidados. El
[]
en JSON representa una matriz y debe correlacionarse con una colección de Java comoList
o simplemente una matriz de Java simple. El{}
en JSON representa un objeto y debe mapearse a unaMap
clase Java o solo a alguna clase JavaBean.Tiene un objeto JSON con varias propiedades cuya
groups
propiedad representa una matriz de objetos anidados del mismo tipo. Esto se puede analizar con Gson de la siguiente manera:Bastante simple, ¿no es así? Solo tenga un JavaBean adecuado y llame
Gson#fromJson()
.Ver también:
fuente
Bewaaaaare de Gson! Es muy bueno, muy grande, pero el segundo desea hacer otra cosa que simples objetos nada, que fácilmente podría necesitar para empezar a construir sus propios serializadores (que no es que dura).
Además, si tiene una matriz de Objetos y deserializa algo de json en esa matriz de Objetos, ¡los tipos verdaderos están PERDIDOS! ¡Los objetos completos ni siquiera se copiarán! Use XStream .. Que, si usa el jsondriver y establece la configuración adecuada, codificará los tipos feos en el json real, para que no pierda nada. Un pequeño precio a pagar (feo json) por la verdadera serialización.
Tenga en cuenta que Jackson soluciona estos problemas y es más rápido que GSON.
fuente
Curiosamente, el único procesador JSON decente mencionado hasta ahora ha sido GSON.
Aquí hay más buenas opciones:
EDITAR (agosto / 2013):
Uno más a considerar:
fuente
O con Jackson:
fuente
Si, por cualquier cambio, se encuentra en una aplicación que ya utiliza http://restfb.com/ , puede hacer lo siguiente:
etc.
fuente
Código java fácil y funcional para convertir
JSONObject
aJava Object
Employee.java
LoadFromJSON.java
fuente
fuente
Si utiliza algún tipo de mapas especiales con claves o valores también de mapas especiales, verá que no está contemplado por la implementación de google.
fuente
¿Qué hay de malo con las cosas estándar?
fuente
Prueba boon:
https://github.com/RichardHightower/boon
Es malvado rápido:
https://github.com/RichardHightower/json-parsers-benchmark
No confíes en mi palabra ... mira el punto de referencia de Gatling.
https://github.com/gatling/json-parsers-benchmark
(Hasta 4 veces en algunos casos, y fuera de los 100 de la prueba. También tiene un modo de superposición de índice que es aún más rápido. Es joven pero ya tiene algunos usuarios).
Puede analizar JSON a Maps y Lists más rápido que cualquier otra lib puede analizar a un JSON DOM y eso es sin el modo Index Overlay. Con el modo Boon Index Overlay, es aún más rápido.
También tiene un modo JSON lax muy rápido y un modo de analizador PLIST. :) (y tiene una memoria súper baja, directo desde el modo de bytes con codificación UTF-8 sobre la marcha).
También tiene el modo JSON más rápido para JavaBean también.
Es nuevo, pero si lo que estás buscando es velocidad y API simple, no creo que haya una API más rápida o más minimalista.
fuente
Dependiendo del formato JSON de entrada (cadena / archivo), cree un jSONString. El objeto de clase de mensaje de muestra correspondiente a JSON se puede obtener de la siguiente manera:
Mensaje msgFromJSON = new ObjectMapper (). ReadValue (jSONString, Message.class);
fuente
La forma más fácil es que puede utilizar este método de conversión de valores suaves, que es un método personalizado en el que puede convertir jsonData en su clase Dto específica.
fuente