Tengo el siguiente texto JSON. ¿Cómo puedo analizarlo para obtener los valores de pageName
, pagePic
, post_id
, etc.?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Respuestas:
La biblioteca org.json es fácil de usar. Código de ejemplo a continuación:
Puede encontrar más ejemplos de: Parse JSON en Java
Jar descargable: http://mvnrepository.com/artifact/org.json/json
fuente
org.json
sobre otras bibliotecas para el análisis JSON simple sin siquiera mirar. Es la biblioteca de referencia que Douglas Crockford (el descubridor de JSON) creó.Por el bien del ejemplo, supongamos que tiene una clase
Person
con solo unname
.Google GSON ( Maven )
Mi favorito personal en cuanto a la gran serialización / deserialización JSON de objetos.
Actualizar
Si desea obtener un solo atributo, también puede hacerlo fácilmente con la biblioteca de Google:
Org.JSON ( Maven )
Si no necesita la deserialización de objetos, sino simplemente obtener un atributo, puede probar org.json (¡ o consulte el ejemplo de GSON anterior! )
Jackson ( Maven )
fuente
JsonNode
s, GSON tiene algo similar). Podría ser bueno mostrar fragmentos, ya que es similar a la única forma que ofrece org.json.Si se quiere crear un objeto Java desde JSON y viceversa, use tarros de terceros GSON o JACKSON, etc.
Pero si uno solo quiere analizar una cadena JSON y obtener algunos valores, (O crear una cadena JSON desde cero para enviarla por cable) simplemente use el jar JaveEE que contiene JsonReader, JsonArray, JsonObject, etc. Es posible que desee descargar la implementación de ese especificaciones como javax.json. Con estos dos frascos puedo analizar el json y usar los valores.
Estas API realmente siguen el modelo de análisis DOM / SAX de XML.
fuente
analizador quick-json es muy sencillo, flexible, muy rápido y personalizable. Intentalo
caracteristicas:
Se puede usar así:
fuente
Podrías usar Google Gson .
Con esta biblioteca, solo necesita crear un modelo con la misma estructura JSON. Luego, el modelo se completa automáticamente. Debe llamar a sus variables como sus teclas JSON, o usarlas
@SerializedName
si desea usar nombres diferentes.JSON
De tu ejemplo:
Modelo
Analizando
Ahora puedes analizar usando la biblioteca Gson:
Importar Gradle
Recuerde importar la biblioteca en el archivo Gradle de la aplicación
Generación automática de modelos.
Puede generar modelos desde JSON automáticamente utilizando herramientas en línea como esta .
fuente
Casi todas las respuestas dadas requieren una deserialización completa del JSON en un objeto Java antes de acceder al valor en la propiedad de interés. Otra alternativa, que no sigue esta ruta es usar JsonPATH, que es como XPath para JSON y permite atravesar objetos JSON.
Es una especificación y la buena gente de JayWay ha creado una implementación de Java para la especificación que puede encontrar aquí: https://github.com/jayway/JsonPath
Básicamente, para usarlo, agréguelo a su proyecto, por ejemplo:
y para usar:
etc ...
Consulte la página de especificaciones de JsonPath para obtener más información sobre las otras formas de cruzar JSON.
fuente
A - Explicación
Puede usar las bibliotecas de Jackson , para vincular la cadena JSON en instancias de POJO ( Objeto Java antiguo simple ). POJO es simplemente una clase con solo campos privados y métodos públicos getter / setter. Jackson va a atravesar los métodos (usando la reflexión ), y asigna el objeto JSON a la instancia de POJO a medida que los nombres de campo de la clase se ajustan a los nombres de campo del objeto JSON.
En su objeto JSON, que en realidad es un objeto compuesto , el objeto principal consta de dos subobjetos. Entonces, nuestras clases POJO deben tener la misma jerarquía. Llamaré a todo el objeto JSON como objeto de página . El objeto de página consta de un objeto PageInfo y una matriz de objetos Post .
Entonces tenemos que crear tres clases POJO diferentes;
El único paquete que he usado es Jackson ObjectMapper, lo que hacemos es vincular datos;
Las dependencias requeridas, los archivos jar se enumeran a continuación;
Aquí está el código requerido;
B - Clase principal POJO: Página
C - Clase POJO para niños: PageInfo
D - Clase POJO para niños: Publicar
E - Archivo JSON de muestra: sampleJSONFile.json
Acabo de copiar su muestra JSON en este archivo y ponerlo en la carpeta del proyecto.
F - Código de demostración
G - Salida de demostración
fuente
Use minimal-json que es muy rápido y fácil de usar. Puede analizar desde String obj y Stream.
Data de muestra:
Analizando:
Creando JSON:
Maven
fuente
Creo que la mejor práctica debería ser pasar por la API oficial de Java JSON que todavía están en progreso.
fuente
Como nadie lo mencionó todavía, aquí hay un comienzo de una solución usando Nashorn (JavaScript runtime parte de Java 8, pero obsoleto en Java 11).
Solución
Comparación de rendimiento
Escribí contenido JSON que contenía tres matrices de 20, 20 y 100 elementos respectivamente. Solo quiero obtener los 100 elementos de la tercera matriz. Utilizo la siguiente función de JavaScript para analizar y obtener mis entradas.
Ejecutar la llamada un millón de veces usando Nashorn toma 7.5 ~ 7.8 segundos
org.json toma 20 ~ 21 segundos
Jackson toma 6.5 ~ 7 segundos
En este caso, Jackson funciona mejor que Nashorn, que funciona mucho mejor que org.json. Nashorn API es más difícil de usar que org.json's o Jackson's. Dependiendo de sus requisitos, Jackson y Nashorn pueden ser soluciones viables.
fuente
"
"? No pulgadas? ¿Son segundos? ¿Minutos?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
El siguiente ejemplo muestra cómo leer el texto en la pregunta, representada como la variable "jsonText". Esta solución utiliza la API Java EE7 javax.json (que se menciona en algunas de las otras respuestas). La razón por la que lo agregué como una respuesta separada es que el siguiente código muestra cómo acceder realmente a algunos de los valores que se muestran en la pregunta. Se necesitaría una implementación de la API javax.json para ejecutar este código. El paquete completo para cada una de las clases requeridas se incluyó ya que no quería declarar declaraciones de "importación".
Ahora, antes de que alguien vaya y rechace esta respuesta porque no usa GSON, org.json, Jackson o cualquiera de los otros marcos de terceros disponibles, es un ejemplo de "código requerido" según la pregunta para analizar el texto proporcionado. Soy muy consciente de que la adhesión al estándar JSR 353 actual no se estaba considerando para JDK 9 y, como tal, la especificación JSR 353 debería tratarse de la misma manera que cualquier otra implementación de manejo de JSON de terceros.
fuente
Esto me dejó alucinado con lo fácil que fue. Simplemente puede pasar una
String
retención de su JSON al constructor de un JSONObject en el paquete org.json predeterminado.Hecho. Gotas de micrófono . Esto funciona con
JSONObjects
también. Después de eso, puede mirar a través de su jerarquía deObjects
usar losget()
métodos en sus objetos.fuente
JSONArray
tipo no es parte de la API J2SE JDK y no dice qué API o biblioteca de terceros proporciona este tipo.Hay muchas bibliotecas JSON disponibles en Java.
Los más notorios son: Jackson, GSON, Genson, FastJson y org.json.
Por lo general, hay tres cosas que uno debe mirar para elegir cualquier biblioteca:
Específicamente para las bibliotecas JSON (y cualquier biblioteca de serialización / deserialización), el enlace de datos también suele ser de interés ya que elimina la necesidad de escribir código de placa de caldera para empacar / desempaquetar los datos.
Para 1, vea este punto de referencia: https://github.com/fabienrenaud/java-json-benchmark que hice usando JMH que compara (jackson, gson, genson, fastjson, org.json, jsonp) el rendimiento de serializadores y deserializadores usando stream y API de enlace de datos. Para 2, puede encontrar numerosos ejemplos en Internet. El punto de referencia anterior también se puede utilizar como fuente de ejemplos ...
Conclusión rápida del punto de referencia: Jackson se desempeña entre 5 y 6 veces mejor que org.json y más del doble que GSON.
Para su ejemplo particular, el siguiente código decodifica su json con jackson:
Hazme saber si tienes alguna pregunta.
fuente
Además de otras respuestas, recomiendo este servicio en línea de código abierto jsonschema2pojo.org para generar rápidamente clases Java a partir de esquemas json o json para GSON, Jackson 1.xo Jackson 2.x. Por ejemplo, si tienes:
El jsonschema2pojo.org para GSON generó:
fuente
Si tiene alguna clase de Java (digamos Mensaje) que representa la cadena JSON (jsonString), puede usar la biblioteca Jackson JSON con:
y desde el objeto de mensaje puede obtener cualquiera de sus atributos.
fuente
Gson es fácil de aprender e implementar, lo que necesitamos saber es seguir dos métodos
toJson () - Convertir objeto Java a formato JSON
fromJson () - Convierte JSON en objeto Java
``
``
fuente
Hay muchas bibliotecas de código abierto presentes para analizar el contenido JSON en un objeto o simplemente para leer los valores JSON. Su requisito es solo leer valores y analizarlos en un objeto personalizado. Entonces, la biblioteca org.json es suficiente en su caso.
Use la biblioteca org.json para analizarla y crear JsonObject:
Ahora, use este objeto para obtener sus valores:
Puedes ver un ejemplo completo aquí:
Cómo analizar JSON en Java
fuente
Por favor haz algo como esto:
fuente
Puede usar la Biblioteca Gson para analizar la cadena JSON.
También puede recorrer la matriz "posts" de la siguiente manera:
fuente
fuente
Lea la siguiente publicación de blog, JSON en Java .
Esta publicación es un poco antigua, pero aun así quiero responder tu pregunta.
Paso 1: crea una clase POJO de tus datos.
Paso 2: ahora crea un objeto usando JSON.
Para mayor referencia, puede consultar el siguiente enlace .
fuente
Las respuestas principales en esta página usan ejemplos demasiado simples como objetos con una propiedad (por ejemplo, {nombre: valor}). Creo que ese ejemplo simple pero real puede ayudar a alguien.
Así que este es el JSON devuelto por la API de Google Translate:
Quiero recuperar el valor del atributo "traducirTexto", por ejemplo, "Arbeit" usando Gson de Google.
Dos posibles enfoques:
Recupere solo un atributo necesario
Crear objeto Java desde JSON
...
fuente
Primero debes seleccionar una biblioteca de implementación para hacer eso.
La API de Java para el procesamiento JSON (JSR 353) proporciona API portátiles para analizar, generar, transformar y consultar JSON utilizando el modelo de objetos y las API de transmisión.
La implementación de referencia está aquí: https://jsonp.java.net/
Aquí puede encontrar una lista de implementaciones de JSR 353:
¿Cuáles son las API que implementan JSR-353 (JSON)?
Y para ayudarte a decidir ... También encontré este artículo:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Si opta por Jackson, aquí hay un buen artículo sobre la conversión entre JSON a / desde Java usando Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- jackson /
¡Espero eso ayude!
fuente
Puedes usar Jayway JsonPath . A continuación se muestra un enlace de GitHub con código fuente, detalles de pom y buena documentación.
https://github.com/jayway/JsonPath
Por favor siga los pasos a continuación.
Paso 1 : Agregue la dependencia de ruta JSON jayway en su ruta de clase usando Maven o descargue el archivo JAR y agréguelo manualmente.
Paso 2 : guarde su entrada JSON como un archivo para este ejemplo. En mi caso, guardé su JSON como sampleJson.txt. Tenga en cuenta que se perdió una coma entre pageInfo y las publicaciones.
Paso 3 : Lea el contenido JSON del archivo anterior usando bufferedReader y guárdelo como String.
Paso 4 : Analiza tu cadena JSON usando el analizador JSONway JSON.
Paso 5 : Lea los detalles como a continuación.
El resultado será :
fuente
Tengo JSON así:
Clase de Java
Código para convertir este JSON a una clase Java.
Maven
fuente
Se puede usar la anotación Apache @Model para crear clases de modelos Java que representan la estructura de los archivos JSON y usarlos para acceder a varios elementos en el árbol JSON . A diferencia de otras soluciones, esta funciona completamente sin reflexión y, por lo tanto, es adecuada para entornos donde la reflexión es imposible o conlleva una sobrecarga significativa.
Hay un proyecto de muestra de Maven que muestra el uso. En primer lugar, define la estructura:
y luego usa las clases RepositoryInfo y Owner generadas para analizar el flujo de entrada proporcionado y recoger cierta información mientras lo hace:
¡Eso es! Además de eso, aquí hay un resumen en vivo que muestra un ejemplo similar junto con la comunicación de red asíncrona.
fuente
jsoniter
(jsoniterator) es una biblioteca json relativamente nueva y simple, diseñada para ser simple y rápida. Todo lo que necesita hacer para deserializar los datos json esdonde
jsonData
es una cadena de datos json.Visite el sitio web oficial para más información.
fuente
Podemos usar la clase JSONObject para convertir una cadena JSON en un objeto JSON e iterar sobre el objeto JSON. Usa el siguiente código.
fuente
Puede utilizar la biblioteca de análisis de flujo de DSM para analizar documentos json y XML complejos. DSM analiza los datos solo una vez y no carga todos los datos en la memoria.
Digamos que tenemos clase de página para deserializar datos json dados.
Clase de página
Crea un archivo de mapeo yaml.
Use DSM para extraer campos.
variable de página serializada a json:
DSM es muy bueno para json y xml complejos.
fuente
Puede usar
JsonNode
para una representación de árbol estructurado de su cadena JSON. Es parte de la sólida biblioteca de Jackson Jackson que es omnipresente.fuente