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.