Saltar al contenido

Cómo verificar si el elemento existe en una matriz con jq

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[]).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *