Groovy字符串到CSV
我有一个如下结构的字符串输入:Groovy字符串到CSV,groovy,Groovy,我有一个如下结构的字符串输入: [{name=John, dob=1970-07-27 00:00:00.0, score=81}, {name=Jane, dob=1970-07-28 00:00:00.0, score=77}] 我正在尝试将其转换为CSV输出。因此,预期产出: "name", "dob", "score" "John", "1970-07-27 00:00:00.0", 81 "Jane", "1970-07-28 00:00:00.0", 77 到目前为止,我已经尝
[{name=John, dob=1970-07-27 00:00:00.0, score=81},
{name=Jane, dob=1970-07-28 00:00:00.0, score=77}]
我正在尝试将其转换为CSV输出。因此,预期产出:
"name", "dob", "score"
"John", "1970-07-27 00:00:00.0", 81
"Jane", "1970-07-28 00:00:00.0", 77
到目前为止,我已经尝试过类似的方法
def js = "[{name=John, dob=1970-07-27 00:00:00.0, score=81}, {name=Jane, dob=1970-07-28 00:00:00.0, score=77}]"
def js = new JsonSlurper().parseText(s)
def columns = js*.keySet().flatten().unique()
def encode = { e -> e == null ? '' : e instanceof String ? /"$e"/ : "$e" }
// Print all the column names
println columns.collect { c -> encode( c ) }.join( ',' )
// Then create all the rows
println data.infile.collect { row ->
// A row at a time
columns.collect { colName -> encode( row[ colName ] ) }.join( ',' )
}.join( '\n' )
此操作失败,原因是groovy.json.JsonException:应为“}”或“,”但得到了当前字符“n”
定义不带引号的var js失败,原因是需要“}”、找到“、”
提前感谢您可以尝试此代码片段
import groovy.json.JsonSlurper
def s = '[{"name":"John", "dob":"1970-07-27 00:00:00.0", "score":81},{"name":"Jane", "dob":"1970-07-28 00:00:00.0", "score":77}]'
def js = new JsonSlurper().parseText(s)
def columns = js*.keySet().flatten().unique()
def encode = { e -> e == null ? '' : e instanceof String ? /"$e"/ : "$e" }
println columns.collect { c -> encode(c) }.join(',')
js.each {
println it.values().join(",")
}
我使用Groovy JsonSlurper将字符串转换为映射,为此,您需要给出正确的json字符串 我编写了一个简单的解析器,它将拆分行。如果您的输入发生更改(即,逗号或
=
用于任何其他位置),您将需要一个更复杂的解析器:
input = '''[{name=John, dob=1970-07-27 00:00:00.0, score=81},
{name=Jane, dob=1970-07-28 00:00:00.0, score=77},
{name=Test, dob=1980-01-01 00:00:00.0, score=90}]'''
maps = (input =~ /\{(.*)\}/)
.collect {
it[1]
.split(', ')
.collectEntries { entry ->
entry.split '=' with {
[it.first(), it.last()]
}
}
}
assert maps == [
[name:'John', dob:'1970-07-27 00:00:00.0', score:'81'],
[name:'Jane', dob:'1970-07-28 00:00:00.0', score:'77'],
[name:'Test', dob:'1980-01-01 00:00:00.0', score:'90']
]
js
不是合法的字符串文字,或者是合法的列表或映射文字。你是对的。如果这是一份合法的名单,那么解决问题就很简单了。不幸的是,这就是我所拥有的。尝试用双引号将其字符串化也无济于事,您不能在groovy源文件中键入JSON并期望它能被很好地解析。或者将其作为字符串使用(如果这是您所拥有的),然后使用JsonSlurper对其进行解析,或者使用groovy list/map文本编写它。如何以及从何处获取此数据<代码>[{name=John,dob=1970-07-27 00:00:00.0,score=81}我创建了一个简化版本的真实数据。实际数据有131个字段,是一个从政府机构接收的转储。没有选择返回并得到一个格式良好的JSON或合法的List.String不是一个格式良好的JSONN,您必须将原始字符串格式化为适当的JSON字符串。谢谢你。