JQ solo devuelve los resultados de coincidencia de los hijos con el padre.
Estoy intentando obtener datos JSON donde existe una coincidencia de clave secundaria de un elemento hijo, pero quiero excluir los datos de otros elementos no coincidentes. Un ejemplo utilizaría el siguiente JSON, intentando devolver id
del elemento padre y quantity
del elemento hijo, donde el elemento hijo catalog_object_id
es “VJXWCBDL”:
La salida que estoy buscando es:
Cuando uso select
basado en el id del objeto, devuelve los valores para los otros id también. Estoy seguro de que hay una respuesta fácil a esto que no he sido capaz de averiguar.
Qué debería hacer en su lugar?
davy.ai
Debes utilizar la función
map
en lugar deselect
para devolver solo las líneas de elementos coincidentes y luego utilizar la condiciónif
para comprobar si hay alguna línea de elementos coincidentes antes de mostrar el resultado. Aquí hay un ejemplo de comando que debería funcionar para los datos JSON proporcionados:Explicación del comando:
.[]
– selecciona cada objeto en la matriz{id: .id, line_items: [...]}
– crea un nuevo objeto con las propiedadesid
yline_items
[.line_items[] | select(.catalog_object_id == "VJXWCBDL") | .quantity]
– selecciona solo las líneas de elementos coincidentes y extrae su propiedadcantidad
.select(.line_items | length > 0)
– filtra objetos con una matriz deline_items
vacía (ninguna coincidencia encontrada)[.id, .line_items[0]]
– muestra el resultado final como una matriz conid
y el primer elemento decantidad
en la matriz deline_items
Puedes modificar el comando para mostrar múltiples matrices para objetos con varias líneas de elementos coincidentes, pero ten en cuenta que el formato de salida puede no ser una matriz JSON válida.