Solución:
La semántica de ‘contiene’ no es sencilla en absoluto. En general, sería mejor usar ‘índice’ para probar si una matriz tiene un valor específico, por ejemplo
.fruit | index( "orange" )
Sin embargo, si el elemento de interés es en sí mismo una matriz, la forma general:
ARRAY | index( [ITEM] )
debe usarse, por ejemplo:
[1, [2], 3] | index( [[2]] ) #=> 1
EN 1
Si tu jq tiene IN/1
entonces una mejor solución es usarlo:
.fruit as $f | "orange" | IN($f[])
Si tu jq tiene first/1
(al igual que jq 1.5), entonces aquí hay una definición rápida de IN/1
usar:
def IN(s): first((s == .) // empty) // false;
[WARNING: SEE THE COMMENTS AND ALTERNATIVE ANSWERS.]
cat fruit.json | jq '.fruit | contains(["orange"])'
Para futuros visitantes, si tiene la matriz en una variable y desea verificar la aporte en su contra, y tienes jq 1.5 (sin IN), tu mejor opción es index
pero con una segunda variable:
.inputField as $inputValue | $storedArray|index($inputValue)
Esto es funcionalmente equivalente a .inputField | IN($storedArray[])
.