Tengo algunos problemas al analizar este archivo json. Parece que tengo algunos problemas al analizar el nombre de clave del objeto y no estoy muy seguro de cómo resolverlo.

Mi archivo JenkinsfileProperties.json se ve así:

{
   "predefines": {
        "69dA06x01": {
            "customer": "hello1",
            "label":    "test1",
            "opt":      true,
            "license": "baseline"
        },
        "69dR08x06": {
            "customer": "hello2",
            "label":    "test2",
            "opt":      true,
            "license": "baseline"
        }
    }
}

Mi archivo maravilloso se ve así:

conf = getJobConfiguration scm: scm, local: "checkout", file: "JenkinsfileProperties.json"

conf.predefines.each { predef ->
    builds["Build ${predef}"] = build(predef)
    lints["Lint ${predef}"] = lint(predef)
    unitTests["Unit Test ${predef}"] = unitTest(predef, predef.customer)
}

En mi cabeza, config.predefines.each { predef -> me dará cada instancia de 69d.... junto con sus hijos. Por lo tanto, acceder a un niño es simplemente cuestión de hacer predef.customer o predef.label, etc.

Ahora mismo obtengo No such field found: field java.util.AbstractMap$SimpleImmutableEntry customer. ¿Qué estoy haciendo mal?

Necesito poder iterar a través de las entradas de 69... y también tendré que poder obtener su valor, es decir, 69dA06x01

1
Joel 18 oct. 2019 a las 14:19

1 respuesta

La mejor respuesta

Resuelto así

Se accede a los valores clave (69d...) de la siguiente manera: predef.key

Se accede a las subentradas de claves así:

predef.value["customer"]
predef.value["opt"]
predef.value["license"]
predef.value["label"]

Todos juntos:

conf.predefines.each { predef ->
    builds["Build ${predef.key}"] = build(predef)
    lints["Lint ${predef.key}"] = lint(predef)
    unitTests["Unit Test ${predef.key}"] = unitTest(predef, predef.value["customer"])
}

Esto funciona si las subentradas son iguales en todo momento, pero podría ver un escenario en el que todas las subentradas se denominan cosas diferentes en cada objeto 69d.... Afortunadamente, esto funciona para este escenario.

1
Joel 18 oct. 2019 a las 13:05