Jenkins中如何提取JSON文件的键值并返回为列表?
提取JSON顶层键作为Jenkins Active Choices参数列表
问题场景
你有如下格式的JSON文件:
[ { "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" } } ]
需要提取其中的顶层键(如leaf101、leaf102)作为列表,用于Jenkins的Active Choices Parameter参数,但原Groovy脚本返回空值,直接返回parsedJson会得到整个文件内容作为单个变量。
原脚本:
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;
修改后的可用脚本
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) // 先取出数组中的唯一对象,再获取其所有顶层键 def nodeMap = parsedJson[0] list = nodeMap.keySet().toList() return list;
问题原因说明
原脚本失效的核心原因:
- 解析后的
parsedJson是一个JSON数组,里面仅包含一个元素(存储所有节点的对象)。直接遍历数组时,it指向这个对象,而该对象本身没有node_name属性,导致添加的内容为空,最终返回空列表。 - 正确逻辑是先取出数组中的对象,再通过
keySet()方法获取该对象的所有顶层键,最后转成列表即可。
内容的提问来源于stack exchange,提问作者O.K.
相关产品推荐
相关产品推荐

