groovy 从 csv 转换为 json

groovy convert from csv to json

如何将 CSV 转换为 JSON 并单独访问对象以创建自定义字符串?在下面的代码中,为什么我无法查看 log.info(rows.Id[0]) 的输出?????当我打印时,它在控制台中显示为 null。

data.csv 有两列(ID,值),共 100 行。

import groovy.json.JsonOutput
import groovy.json.JsonSlurper
def lines = new File('data.csv').readLines()

def keys = lines[0].split(',')
def rows = lines[1..-1].collect { line ->
def i = 0, vals = line.split(',')
        keys.inject([:]) { map, key -> map << ["$key": vals[i++]] }
    }

def jsonSlurper = new JsonSlurper()
jsonSlurper = jsonSlurper.parse(JsonOutput.toJson(rows))
log.info(JsonOutput.prettyPrint(JsonOutput.toJson(rows)))
log.info(rows.Id[0])

您的问题是在地图中使用 GString 作为键。这个 looks/prints 像一个字符串键,但在身份方面(地图如何 查一下)不是。

groovy:000> key = "a"
===> a
groovy:000> ["$key": 1].containsKey(key)
===> false
groovy:000> [(key): 1].containsKey(key)
===> true

所以请改用:[(key): vals[i++]]

或者,如果您想进一步打高尔夫球:

[keys, line.split(',')].transpose().collectEntries()