es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Debes utilizar la función map en lugar de select para devolver solo las líneas de elementos coincidentes y luego utilizar la condición if 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:

    jq '.[] | {id: .id, line_items: [.line_items[] | select(.catalog_object_id == "VJXWCBDL") | .quantity]} | select(.line_items | length > 0) | [.id, .line_items[0]]' test.json
    

    Explicación del comando:

    • .[] – selecciona cada objeto en la matriz
    • {id: .id, line_items: [...]} – crea un nuevo objeto con las propiedades id y line_items
    • [.line_items[] | select(.catalog_object_id == "VJXWCBDL") | .quantity] – selecciona solo las líneas de elementos coincidentes y extrae su propiedad cantidad.
    • select(.line_items | length > 0) – filtra objetos con una matriz de line_items vacía (ninguna coincidencia encontrada)
    • [.id, .line_items[0]] – muestra el resultado final como una matriz con id y el primer elemento de cantidad en la matriz de line_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.

Comments are closed.