You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

问题原因说明

原脚本失效的核心原因:

  1. 解析后的parsedJson是一个JSON数组,里面仅包含一个元素(存储所有节点的对象)。直接遍历数组时,it指向这个对象,而该对象本身没有node_name属性,导致添加的内容为空,最终返回空列表。
  2. 正确逻辑是先取出数组中的对象,再通过keySet()方法获取该对象的所有顶层键,最后转成列表即可。

内容的提问来源于stack exchange,提问作者O.K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:24:27