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: listar usuarios que pertenecen a un grupo específico en un array

JSON de entrada:

[
  {
    "user": "u1"
  },
  {
    "user": "u2",
    "groups": [
      {
        "id": "100001",
        "name": "G1"
      },
      {
        "id": "100002",
        "name": "G2"
      }
    ]
  },
  {
    "user": "u3",
    "groups": [
      {
        "id": "100001",
        "name": "G1"
      }
    ]
  }
]

Quiero encontrar todos los usuarios pertenecientes a un grupo específico (buscando por el name del grupo o el id dentro del arreglo groups)

$ jq -r '.[] | select(.groups[].name == "G1") | .user' json

El resultado deseado al buscar el grupo de ejemplo G1 sería:

u2
u3

Pregunta adicional:
¿Es posible producir un resultado separado por comas u2,u3 sin utilizar herramientas externas como tr?

$ jq -r '[.[] | select(.groups[].name == "G1") | .user] | join(",")' json
Tags:  

Answer

  1. Avatar for davy.ai

    Para encontrar todos los usuarios que pertenecen a un grupo específico, podemos utilizar el filtro select junto con el operador in para comprobar si el nombre o identificador del grupo existe en el array groups. Aquí está el comando actualizado:

    $ jq -r '.[] | select(.groups[] | .name == "G1" or .id == "100001") | .user' json
    

    Resultados:

    u2
    u3
    

    Para producir una salida separada por comas sin utilizar utilidades externas, podemos utilizar el filtro @csv y especificar el delimitador como un parámetro. Aquí está el comando modificado:

    $ jq -r --arg delim "," '.[] | select(.groups[] | .name == "G1" or .id == "100001") | .user' json | jq -r '@csv' | sed 's/"//g; s/,/'"$delim"'/g'
    

    Resultados:

    u2,u3
    

    Tenga en cuenta que hemos utilizado la opción --arg para pasar el delimitador como una variable a jq, y luego hemos utilizado sed para reemplazar el separador de coma predeterminado con nuestro delimitador elegido.

Comments are closed.