【问题标题】:groovy convert from csv to jsongroovy 从 csv 转换为 json
【发布时间】:2020-10-23 14:50:41
【问题描述】:

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

data.csv 有两列(ID、Value),共 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])

【问题讨论】:

    标签: groovy groovyshell groovy-console


    【解决方案1】:

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

    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()
    

    【讨论】:

    • javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingMethodException: 没有方法签名:groovy.json.JsonSlurper.parse() 适用于参数类型:(字符串)值:
    • 当我更改为 [(key): vals[i++]] 时,我看到了这个异常。我的目标是读取 csv 并转换为 json,以便我可以根据我的要求操作一些东西(从我捕获的值中创建一个新字符串)。
    • 这是parseText 不是parse。错误消息很可能会告诉您。
    • 好的,你能告诉我为什么这段代码什么都没有返回吗?它是上面 one.def foo= (int)Math.floor(rows.Id.size()/1000) def subList=rows.Id.subList(0, 1000) String str = subList.toString() 的扩展。 join('-') println(str) def names_str = jsonSlurper.Id.getClass()
    • 如果您有不同的问题,请创建一个新问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-03-11
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多