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

求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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:42:33