Tengo el siguiente objeto JSON
{"color": "red", "shapes": [ "square", "triangle" ]}Me gustaría validar el objeto JSON usando jq usando las siguientes condiciones:
El resultado devuelto debe ser verdadero o falso .
Tengo 2 comandos jq que validan ambas condiciones, pero no estoy seguro de cómo combinar esto en 1 expresión:
json='{"color": "red", "shapes": [ "square", "triangle" ]}' echo "$json" | jq '.["color"] | test("red")' echo "$json" | jq 'any(.shapes[]; contains("round"))|not'Cualquier sugerencia o ayuda sería apreciada.
Simplemente puede verificar que ambas pruebas devuelvan verdadero con all :
echo '{"color": "red", "shapes": [ "square", "triangle" ]}' | jq '[(.["color"] | test("red")), (any(.shapes[]; contains("round"))|not) ] | all' Cree una matriz que contenga los resultados de cada prueba, luego canalice esa matriz a all .
Una forma correcta de probar una colección de condiciones es usando and .
En tu caso, una prueba correcta sería:
(.color == "red") and (.shapes|index("round") == null)Ejemplo (mecanografiado):
jq '(.color == "red") and (.shapes|index("round") == null)' {"color": "red", "shapes": [ "square", "triangle" ]} true En jq, not es un filtro sintácticamente ordinario, por lo que podría escribir la segunda condición como: (.shapes | index("round") | not) .