groovy 如何访问json文件中的每个键值并将它们作为jenkins中的列表返回?

rggaifut  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(143)

我有一个列表元素,如下所示:

[
    {
        "leaf101": {
            "node_id": "101",
            "node_name": "leaf101",
            "pod_id": "1"
        },
        "leaf102": {
            "node_id": "102",
            "node_name": "leaf102",
            "pod_id": "1"
        },
        "spine103": {
            "node_id": "103",
            "node_name": "spine103",
            "pod_id": "1"
        }
    }
]

我尝试给予一个列表,将它们作为变量列在Jenkins的Active choices参数中。我的脚本如下所示:

import groovy.json.JsonSlurper
def list = []

File textfile= new File("/var/lib/jenkins/test/vars/nodes.json")
JsonSlurper slurper = new JsonSlurper()
def parsedJson = slurper.parse(textfile)

parsedJson.each {
    list.add (it.node_name.toString())
}

return list;

如果我在结尾输入return parsedJson,我会得到整个文件内容作为一个变量,我怎么能只返回像“leaf01,leaf02 ...”这样的键值呢?
先谢谢你。

guicsvcw

guicsvcw1#

parsedJson.each {
    list.add (it.node_name.toString())
}

我认为问题在于it是包含[leaf101:[node_id:101, node_name:leaf101, pod_id:1], leaf102:[node_id:102, node_name:leaf102, pod_id:1], spine103:[node_id:103, node_name:spine103, pod_id:1]]的外部对象,所以it.node_name不起作用,您需要迭代到模型更深的一层。
例如,这将产生您所期望的结果:

parsedJson.each { obj ->
        obj.each { k, v ->
            list.add v.node_name
        }
    }

相关问题