Groovy实现CSV列值添加及JSON导出至CSV的方法咨询
解决方法:给CSV添加新列
你的现有代码基于二维列表生成CSV,要添加新列只需给表头和每行数据补充对应值即可,下面分两种场景说明:
1. 基于现有二维列表修改
如果数据已经是二维列表格式,直接扩展表头和每行数据:
def data = [ // 表头新增目标列名(比如country) ['place', 'firstname', 'lastname', 'team', 'country'], // 每行补充对应列的值 ['1', 'Lorena', 'Wiebes', 'Team DSM', 'Netherlands'], ['2', 'Marianne', 'Vos', 'Team Jumbo Visma', 'Netherlands'], ['3', 'Lotte', 'Kopecky', 'Team SD Worx', 'Belgium'] ] def file = new File("C:/Temp/data.csv") file.text = data*.join(',').join(System.lineSeparator())
2. 从JSON转换时添加新列
如果你的原始数据是JSON(符合你"JSON导出至CSV"的需求),先解析JSON为对象列表,再补充新列后生成CSV:
// 模拟JSON解析后的对象列表 def jsonData = [ [place: '1', firstname: 'Lorena', lastname: 'Wiebes', team: 'Team DSM'], [place: '2', firstname: 'Marianne', lastname: 'Vos', team: 'Team Jumbo Visma'], [place: '3', firstname: 'Lotte', lastname: 'Kopecky', team: 'Team SD Worx'] ] // 定义包含新列的表头 def headers = ['place', 'firstname', 'lastname', 'team', 'country'] // 处理数据:补充新列值,按表头顺序提取字段 def data = [headers] + jsonData.collect { item -> // 可根据业务逻辑动态赋值新列 item.country = item.firstname == 'Lotte' ? 'Belgium' : 'Netherlands' headers.collect { header -> item[header] } } // 生成CSV文件 def file = new File("C:/Temp/data.csv") file.text = data*.join(',').join(System.lineSeparator())
进阶:用官方工具生成标准CSV
如果CSV内容包含逗号、引号等特殊字符,手动拼接会出错,推荐用Groovy自带的CsvBuilder生成标准格式:
@Grab('org.codehaus.groovy:groovy-all:3.0.17') import groovy.csv.CsvBuilder def data = [ [place: '1', firstname: 'Lorena', lastname: 'Wiebes', team: 'Team DSM', country: 'Netherlands'], [place: '2', firstname: 'Marianne', lastname: 'Vos', team: 'Team Jumbo Visma', country: 'Netherlands'], [place: '3', firstname: 'Lotte', lastname: 'Kopecky', team: 'Team SD Worx', country: 'Belgium'] ] def csv = new CsvBuilder().build { row(data[0].keySet()) // 写入表头 data.each { row(it.values()) } // 写入每行数据 } new File("C:/Temp/data.csv").text = csv
Groovy优质学习资料推荐
- Groovy官方文档:覆盖基础语法、核心特性,附带大量可运行示例,从入门到进阶全覆盖。
- 《Groovy in Action》:经典实战书籍,通过实际案例讲解Groovy的各类用法,适合深入掌握开发技巧。
- Groovy官方示例集:官方维护的代码库,包含集合操作、IO处理、JSON/XML解析等常见场景的实战代码。
- 菜鸟教程Groovy板块:入门友好的教程,用简洁示例讲解基础语法和常用API,适合快速上手。
内容的提问来源于stack exchange,提问作者Mikhail Zhuikov
相关产品推荐
相关产品推荐

