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.

Dividir JSON en varios archivos JQ

Soy nuevo en esto y estoy tratando de dividir un JSON en varios archivos según su contenido. El “nombre” del grupo objetivo es “root_rgs” y me gustaría tenerlo en archivos diferentes cada uno.

{
  "root_rgs": [
    "PROM_FD_ARCNA",
    "PROM_JOB_ICMP"
  ],
  "targets": [
    "HCC02155",
    "HCC09350",
    "HCC09321",
    "HCCEFACTORYWWW",
    "HCC9723"
  ]
}
{
  "root_rgs": [
    "PROM_FD_ARCNA",
    "PROM_JOB_WIN"
  ],
  "targets": [
    "LABTNSARWID236",
    "LABTNSARWID692",
    "VM00006"
  ]
}
{
  "root_rgs": [
    "PROM_FD_MTZ",
    "PROM_JOB_ICMP"
  ],
  "targets": [
    "TEIARWIN205",
    "TEIARWDB150",
    "TEIARWCXWA212"
  ]
}

¿Es posible generar algo como esto?:

ARCNA_ICMP.json

{
TARGETS:
        "HCC02155",
        "HCC09350",
        "HCC09321",
        "HCCEFACTORYWWW",
        "HCC9723"
}

ARCNA_WIN.json

{
TARGETS:
    "LABTNSARWID236",
    "LABTNSARWID692",
    "VM00006"
}

Y así sucesivamente…

Espero que sea claro, gracias a todos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en json, archivo, jq y partición, es posible dividir un archivo JSON en diferentes archivos según su contenido. Se puede utilizar la herramienta de línea de comandos jq para filtrar los datos y guardar los resultados en archivos separados.

    Suponiendo que el archivo JSON de entrada se llama input.json y deseas dividirlo según los valores de la clave root_rgs, puedes usar el siguiente comando:

    jq -c '.[]' input.json | while read -r item; do
      name=$(echo $item | jq -r '."root_rgs"[0]')
      targets=$(echo $item | jq -c '."targets"')
    
      echo $targets > "${name}_targets.json"
    done
    

    Este comando filtra el archivo JSON de entrada utilizando el filtro JQ .[] para obtener cada objeto de nivel superior en el archivo. Luego lee cada objeto en el bucle while y extrae el nombre y los objetivos usando JQ. Finalmente, guarda los objetivos en un archivo con un nombre basado en el nombre de la clave root_rgs en cada objeto JSON.

    Por ejemplo, utilizando el JSON de entrada que proporcionaste, este comando crearía los siguientes archivos:

    PROM_FD_ARCNA_targets.json

    ["HCC02155","HCC09350","HCC09321","HCCEFACTORYWWW","HCC9723"]
    

    PROM_FD_MTZ_targets.json

    ["TEIARWIN205","TEIARWDB150","TEIARWCXWA212"]
    

    PROM_JOB_ICMP_targets.json

    ["HCC02155","HCC09350","HCC09321","HCCEFACTORYWWW","HCC9723"]
    

    PROM_JOB_WIN_targets.json

    ["LABTNSARWID236","LABTNSARWID692","VM00006"]
    

    Puedes modificar el comando para ajustar el formato del archivo de salida o el nombre según tus requisitos.

Comments are closed.