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

Groovy(Jenkinsfile)解析JSON文件时如何维持原有元素顺序

问题根因

Groovy 部分老版本的原生JSON解析类在Jenkins沙箱环境下运行时,可能出现数组序列化、反序列化过程中顺序变更的问题,导致原JSON文件里的标签排序错乱。

解决方案

方案1:使用Jenkins官方readJSON流水线步骤(优先推荐)

首先确保Jenkins已安装Pipeline Utility Steps插件,该插件为官方维护的常用工具插件,大部分Jenkins实例已默认预装。该步骤原生支持完全保留JSON文件的原数组顺序,无需额外配置:

// 读取本地JSON文件,返回结果的顺序与原文件完全一致
def dockerTagList = readJSON file: './docker-tags.json'

// 配置构建参数的可选值
pipeline {
    agent any
    parameters {
        choice(
            name: 'TEST_DOCKER_TAG',
            choices: dockerTagList,
            description: '选择待测试的Docker镜像标签,按发布时间倒序排列,最新版本在前'
        )
    }
    // 剩余流水线逻辑
}

方案2:使用原生Groovy解析类强制有序

如果无法安装上述插件,必须使用原生Groovy JSON解析工具,可以显式指定解析结果用有序集合存储,确保顺序不丢失:

import groovy.json.JsonSlurper

// 显式指定数组类型JSON用有序ArrayList存储
def slurper = new JsonSlurper()
slurper.setType(groovy.json.JsonSlurper.Type.LIST)

// 读取并解析文件
def jsonText = new File('./docker-tags.json').text
def dockerTagList = slurper.parseText(jsonText) as List<String>

如果使用JsonSlurperClassic,可以通过强制类型转换为ArrayList保证顺序:

import groovy.json.JsonSlurperClassic

def slurper = new JsonSlurperClassic()
def jsonText = new File('./docker-tags.json').text
def dockerTagList = slurper.parseText(jsonText) as ArrayList<String>
验证方法

解析完成后可以打印列表的前几个元素,和原JSON文件对比即可确认顺序是否一致:

println "解析得到的标签前3位:${dockerTagList.take(3)}"

内容的提问来源于stack exchange,提问作者Micael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:24:03