¿Cómo valido una cadena JSON en Java? ¿O podría analizarlo usando expresiones regulares?
java
json
validation
sappu
fuente
fuente
Respuestas:
Una idea descabellada, intenta analizarla y detecta la excepción:
Este código utiliza la implementación de la API JSON org.json que está disponible en github , en maven y parcialmente en Android .
fuente
Biblioteca JACKSON
Una opción sería usar la biblioteca Jackson . Primero importe la última versión (ahora es):
Luego, puede implementar la respuesta correcta de la siguiente manera:
Opción GSON de Google
Otra opción es usar Google Gson . Importar la dependencia:
Nuevamente, puede implementar la solución propuesta como:
Una prueba simple sigue aquí:
Tenga en cuenta que podría haber un problema "menor" debido a las comas finales que se solucionarán en el lanzamiento
3.0.0
.fuente
new ObjectMapper().readTree("28xjRBuOQqupRopHeSuhRQ")
analiza sin excepción como IntNode (28). Realmente no se esperaba ...Con Google Gson puedes usar JsonParser:
fuente
Puede usar el .mayBeJSON (String str) disponible en la biblioteca JSONUtils .
fuente
Depende de lo que intente probar con su validación. Ciertamente, analizar el json como otros han sugerido es mejor que usar expresiones regulares, porque la gramática de json es más complicada de lo que se puede representar con expresiones regulares.
Si su código java solo analizará el json, use el mismo analizador para validarlo.
Pero solo el análisis no necesariamente le dirá si será aceptado en otros entornos. p.ej
Si su validación debe ser muy exhaustiva, podría:
fuente
Descargue la biblioteca stringtree-json
fuente
Un poco sobre el análisis:
Json, y de hecho todos los idiomas, usan una gramática que es un conjunto de reglas que pueden usarse como sustituciones. para analizar json, básicamente necesitas resolver esas sustituciones a la inversa
Json es una gramática libre de contexto , lo que significa que puede tener objetos / matrices anidados infinitamente y el json aún sería válido. regex solo maneja gramáticas regulares (de ahí el 'reg' en el nombre), que es un subconjunto de gramáticas libres de contexto que no permite anidamiento infinito, por lo que es imposible usar solo regex para analizar todos los json válidos. podría usar un conjunto complicado de expresiones regulares y bucles con la suposición de que nadie anidará más allá de, digamos, 100 niveles de profundidad, pero aún sería muy difícil.
si estás listo para escribir tu propio analizador,
puedes hacer un analizador de descenso recursivo después de resolver la gramática
fuente
Compruebe si una cadena dada es JSON válida en Kotlin . Convertí la respuesta de MByD Java a Kotlin
fuente
Aquí puede encontrar una herramienta que puede validar un archivo JSON, o simplemente puede deserializar su archivo JSON con cualquier biblioteca JSON y si la operación es exitosa, entonces debería ser válida ( google-json, por ejemplo, arrojará una excepción si la entrada está analizando no es válido JSON).
fuente
Usando Playframework 2.6, la biblioteca Json que se encuentra en la API de Java también se puede usar para analizar simplemente la cadena. La cadena puede ser un elemento json de la matriz json. Dado que el valor devuelto no es importante aquí, solo detectamos el error de análisis para determinar que la cadena es una cadena json correcta o no.
fuente
En mi humilde opinión, la forma más elegante es utilizar la API de Java para el procesamiento JSON (JSON-P), uno de los estándares JavaEE que se ajusta al JSR 374 .
Usando Maven, agregue la dependencia en JSON-P:
Visite la página oficial de JSON-P para obtener más información.
fuente
Aquí hay un ejemplo de trabajo para analizar estrictamente json con la biblioteca gson :
Vea también mi otra respuesta detallada en Cómo verificar si JSON es válido en Java usando GSON con más información y un caso de prueba extendido con varios ejemplos no válidos.
fuente
Como puede ver, hay muchas soluciones, principalmente analizan el JSON para verificarlo y al final tendrá que analizarlo para asegurarse.
Pero, dependiendo del contexto, puede mejorar las actuaciones con una verificación previa.
Lo que hago cuando llamo a las API es comprobar que el primer carácter es '{' y el último es '}'. Si no es el caso, no me molesto en crear un analizador.
fuente
He encontrado una solución muy simple para ello.
Primero instale esta biblioteca
net.sf.json-lib
para ello.Hecho. Disfrutar
fuente
Las respuestas son parcialmente correctas. También enfrenté el mismo problema. Analizar el json y buscar excepciones parece la forma habitual, pero la solución falla para la entrada json algo así como
{"outputValueSchemaFormat": "", "sortByIndexInRecord": 0, "sortOrder": 847874874387209 "descendente"} kajhfsadkjh
Como puede ver, el json no es válido ya que hay caracteres de basura al final. Pero si intenta analizar el json anterior usando jackson o gson, obtendrá el mapa analizado de los caracteres válidos json y basura que se ignoran. Cuál no es la solución requerida cuando está utilizando el analizador para verificar la validez de json.
Para la solución a este problema, ver aquí .
PD: Esta pregunta fue formulada y respondida por mí.
fuente
y luego llame a esta función pasando su cadena JSON :)
fuente
La solución anterior cubre ambos escenarios:
fuente
Una solución usando la
javax.json
biblioteca:fuente
Puede usar la
WellFormedJson
clase de la biblioteca de validación declarativa Validol .La declaración en sí podría tener el siguiente aspecto:
La fase de verificación se ve así:
Puede parecer una exageración para una tarea tan simple, pero brilla cuando tienes que validar una solicitud compleja. Consulte la sección de inicio rápido de validol .
fuente