求Groovy脚本:基于一对多JSON关联生成指定格式CSV
Groovy脚本:提取项目多版本数据并生成CSV
以下是满足需求的Groovy脚本,支持从本地文件或远程API获取初始项目数据,自动调用版本接口提取字段,并生成一对多映射的CSV文件:
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.2') import groovy.json.JsonSlurper import groovyx.net.http.RESTClient import java.io.FileWriter // 配置参数:替换为你的实际路径或API地址 def projectSource = './projects.json' // 初始项目JSON来源(本地文件或HTTP/HTTPS地址) def outputCsvPath = './project_versions.csv' // 获取初始项目JSON数据 def projectJson if (projectSource.startsWith('http')) { def restClient = new RESTClient(projectSource) projectJson = restClient.get().data } else { projectJson = new JsonSlurper().parse(new File(projectSource)) } // 初始化CSV写入器 def csvWriter = new FileWriter(outputCsvPath) csvWriter.writeLine('Project,Versions,Phase') // 遍历项目并处理版本数据 projectJson.each { project -> def projectName = project.name ?: '未命名项目' def versionsUrl = project.versionsUrl try { // 请求版本接口 def versionsClient = new RESTClient(versionsUrl) def versionsData = versionsClient.get().data // 遍历版本,写入CSV(处理字段含逗号的情况) versionsData.each { version -> def versionName = version.versionName ?: 'N/A' def phase = version.phase ?: 'N/A' def safeProject = projectName.contains(',') ? "\"$projectName\"" : projectName def safeVersion = versionName.contains(',') ? "\"$versionName\"" : versionName def safePhase = phase.contains(',') ? "\"$phase\"" : phase csvWriter.writeLine("$safeProject,$safeVersion,$safePhase") } } catch (Exception e) { println "[错误] 项目 ${projectName} 版本接口请求失败:${e.message}" csvWriter.writeLine("\"${projectName}\",接口请求失败,${e.message}") } } csvWriter.close() println "CSV文件已生成:${outputCsvPath}"
关键特性说明
- 多数据源兼容:支持从本地JSON文件或远程HTTP/HTTPS接口读取初始项目数据
- CSV格式安全:自动处理字段包含逗号的情况,用双引号包裹避免列拆分错误
- 异常容错:捕获接口请求异常,将错误信息写入CSV,避免脚本中断
- 空值处理:对缺失的项目名、版本名、阶段字段填充默认值
N/A
示例输入与输出
初始项目JSON(projects.json)
[ { "name": "订单管理系统", "versionsUrl": "https://api.example.com/projects/1/versions" }, { "name": "用户中心", "versionsUrl": "https://api.example.com/projects/2/versions" } ]
版本接口返回JSON(订单管理系统示例)
[ { "versionName": "v1.0.0", "phase": "已发布" }, { "versionName": "v1.1.0", "phase": "测试中" }, { "versionName": "v2.0.0", "phase": "开发中" } ]
预期输出CSV
Project,Versions,Phase 订单管理系统,v1.0.0,已发布 订单管理系统,v1.1.0,测试中 订单管理系统,v2.0.0,开发中 用户中心,v0.9.0,已发布 用户中心,v1.0.0,开发中
内容的提问来源于stack exchange,提问作者Arpit Gupta
相关产品推荐
相关产品推荐

