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.

Establezca un valor para un elemento encontrado con select(), pero devuelva todo el JSON.

Tengo un JSON como este:

{
  "name": "com.company1.package1",
  "version": "0.2",
  "dependencies": {
    "com.company1.package2": "0.1",
    "com.company2.package1": "2.3"
  }
}

Y quiero cambiar todas las dependencias con claves que comiencen con “com.company1” a “0.2”.

Logré hacerlo con esto:

jq '.dependencies | with_entries(select(.key|startswith("com.company1"))) | .[]="0.2"'

Pero esto solo devuelve:

{
  "com.company1.package2": "0.2"
}

Me gustaría obtener el JSON inicial completo con solo este valor cambiado. Como así:

{
  "name": "com.company1.package1",
  "version": "0.2",
  "dependencies": {
    "com.company1.package2": "0.2",
    "com.company2.package1": "2.3"
  }
}

¿Cómo podría hacerlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cambiar todas las dependencias con claves que empiecen con “com.company1” a “0.2” y obtener todo el JSON inicial con solo este valor cambiado, puedes utilizar el siguiente comando jq:

    jq '(.dependencies | with_entries(select(.key|startswith("com.company1")) | .value = "0.2"))' input.json > output.json
    

    Este comando seleccionará todas las dependencias con claves que empiecen con “com.company1” y actualizará sus valores a “0.2”. Luego, se enviará el JSON actualizado a un archivo de salida llamado “output.json”, preservando el resto de la estructura del JSON de entrada.

Comments are closed.