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.

No imprimir un campo cuando esté vacío en el JSON resultante.

Tengo json:

"spec": {
    "background": true,
    "failurePolicy": "Fail",
    "rules": [
        {
            "exclude": {
                "resources": {}
            },
            "generate": {
                "clone": {}
            },
            "match": {
                "resources": {
                    "kinds": [
                        "networking.k8s.io/v1/NetworkPolicy"
                    ]
                }
            },
            "mutate": {},
            "name": "validate-nodeport",
            "validate": {
                "message": "Services of type NodePort are not allowed.",
                "pattern": {
                    "spec": {
                        "type": "!NodePort"
                    }
                }
            }
        }
    ],
    "validationFailureAction": "audit"
},
"status": {
    "ready": true
}

Tengo un comando jq:

(.spec.rules[0].match.resources.kinds[] / "/")
| [select(.[1])[0] // null, select(.[2])[1] // null, last]
  as [$version,$group,$kind]
| {$version,$group,$kind}

Pero a veces el campo “version” o “group” pueden estar vacíos. Necesito escribirlo con la siguiente condición: si la cadena es nula, entonces no es necesario escribirla.

Tags:  

Answer

  1. Avatar for davy.ai

    Para agregar una condición en la que los campos “versión” o “grupo” puedan estar vacíos, puede utilizar las sentencias “if-then” en jq. Aquí está un comando jq actualizado que incluye las condiciones:

    (.spec.rules[0].match.resources.kinds[] / "/")
    | [select(.[1])[0] // null, select(.[2])[1] // null, last]
      as [$version,$group,$kind]
    | if $version == null then {group:$group,kind:$kind}
      elif $group == null then {version:$version,kind:$kind}
      else {$version,$group,$kind} end
    

    En este comando, primero extraemos los campos de versión, grupo y tipo utilizando el mismo enfoque que antes. Luego, utilizamos las sentencias “if-then” para establecer los campos de salida en función de las condiciones. Si la versión es nula, creamos un objeto de salida con los campos de grupo y tipo. Si el grupo es nulo, creamos un objeto de salida con los campos de versión y tipo. De lo contrario, creamos un objeto de salida con los tres campos.

Comments are closed.