validator validate online ejemplos array json bash jq

json - validate - string to object javascript



Compruebe si la cadena es un JSON vĂ¡lido con jq (2)

Necesito detectar un error al levantar un servicio. La respuesta puede ser null , un mensaje de error de cadena como

error services-migration/foobar: Not found: services-migration/foobar

o un JSON válido cuando todo está bien. Me preguntaba si hay una forma con jq de verificar simplemente si la cadena proporcionada es un JSON válido. Podría ofc comprobar la cadena para algunas palabras clave como error fe, pero estoy buscando una opción más robusta, por ejemplo. Obtengo un true/false o 1/0 de jq. Estaba revisando los documentos de jq y también algunas preguntas aquí en SO, pero todo se trataba de encontrar y seleccionar valores-clave de un JSON, pero nada acerca de simplemente validar una cadena.

ACTUALIZAR:

Tengo esto:

result=$(some command)

de donde el resultado es la cadena error services-migration/foobar: Not found: services-migration/foobar

Y luego la sentencia if:

if jq -e . >/dev/null 2>&1 <<<"$result"; then echo "it catches it" else echo "it doesn''t catch it" fi

Y siempre termina en la cláusula else .


Del manual:

-e / --exit-status

Establece el estado de salida de jq en 0 si los últimos valores de salida no fueron ni falsos ni nulos, 1 si el último valor de salida fue falso o nulo, o 4 si nunca se produjo un resultado válido. Normalmente, jq sale con 2 si hubo algún problema de uso o error del sistema, 3 si hubo un error de compilación del programa jq, o 0 si se ejecutó el programa jq.

Así que puedes usar:

if jq -e . >/dev/null 2>&1 <<<"$json_string"; then echo "Parsed JSON successfully and got something other than false/null" else echo "Failed to parse JSON, or got false/null" fi

De hecho, si no le importa distinguir entre los diferentes tipos de error, puede simplemente perder el -e . En este caso, el filtro analizará correctamente todo lo que se considere JSON válido (incluido falso / nulo) . y el programa terminará con éxito, por lo if se seguirá la rama if .


Esto es trabajo para mí

echo $json_string | ./jq -e . >/dev/null 2>&1 | echo ${PIPESTATUS[1]}

que devuelve el código de retorno:

  • 0 - Éxito
  • 1 - Fallido
  • 4 - Inválido

A continuación, puede evaluar el código de retorno por otro código.