我可以在groovy中将Json.Builder与JsonOutput结合起来吗?CSV到JSON
我必须在groovy中将csv文件(经过一些修改)解析为json csv文件的内容: 测试键;完成;用户;地位 RWS.PT.001;2020-07-20T23:01:21+02:00;管理通过 RWS.PT.002;2020-07-20T23:02:21+02:00;管理通过 我在groovy中的代码:我可以在groovy中将Json.Builder与JsonOutput结合起来吗?CSV到JSON,json,csv,groovy,Json,Csv,Groovy,我必须在groovy中将csv文件(经过一些修改)解析为json csv文件的内容: 测试键;完成;用户;地位 RWS.PT.001;2020-07-20T23:01:21+02:00;管理通过 RWS.PT.002;2020-07-20T23:02:21+02:00;管理通过 我在groovy中的代码: import groovy.json.* def builder = new groovy.json.JsonBuilder() def root =
import groovy.json.*
def builder = new groovy.json.JsonBuilder()
def root = builder {
testExecutionKey 'DEMO-303'
info (
user: 'admin')
tests 'rows':'ghgh','uuuuu'
}
print JsonOutput.prettyPrint(JsonOutput.toJson(root))
def csvfile = new File('C:/temp/raportTest.csv').readLines()
def keys = csvfile[0].split(';')
def rows = csvfile[1..-1].collect { line ->
def i = 0, vals = line.split(';')
keys.inject([:]) { map, key -> map << ["$key": vals[i++]] }
}
print JsonOutput.prettyPrint(JsonOutput.toJson(rows))
现在我有:
{
"testExecutionKey": "DEMO-303",
"info": {
"user": "admin"
},
"tests": [
{
"rows": "ghgh"
},
"uuuuu"
]
}[
{
"TestKey": "RWS.PT.001",
"Finished": "2020-07-20T23:01:21+02:00",
"user": "admin",
"status": "PASS"
},
{
"TestKey": "RWS.PT.002",
"Finished": "2020-07-20T23:02:21+02:00",
"user": "admin",
"status": "PASS"
}
]
如何将def行(来自JsonOutput)中的代码输入JsonBuilder(而不是“行”:“ghgh”)。
请帮忙 你设计得有点过头了。实际上,您不必组合任何东西,只需使用JsonBuilder和一些Groovy魔术:
import groovy.json.*
def kindaFile = '''
TestKey;Finished;user;status
RWS.PT.001;2020-07-20T23:01:21+02:00;admin;PASS;
RWS.PT.002;2020-07-20T23:02:21+02:00;admin;PASS;
'''.trim()
def keys
def testList = []
//parse CSV
kindaFile.splitEachLine( /;/ ){ parts ->
if( !keys )
keys = parts
else{
def test = [:]
parts.eachWithIndex{ val, ix -> test[ keys[ ix ] ] = val }
testList << test
}
}
def builder = new JsonBuilder()
def root = builder {
testExecutionKey 'DEMO-303'
info user: 'admin'
tests testList
}
println JsonOutput.prettyPrint(JsonOutput.toJson(root))
你设计得有点过头了。实际上,您不必组合任何东西,只需使用JsonBuilder和一些Groovy魔术:
import groovy.json.*
def kindaFile = '''
TestKey;Finished;user;status
RWS.PT.001;2020-07-20T23:01:21+02:00;admin;PASS;
RWS.PT.002;2020-07-20T23:02:21+02:00;admin;PASS;
'''.trim()
def keys
def testList = []
//parse CSV
kindaFile.splitEachLine( /;/ ){ parts ->
if( !keys )
keys = parts
else{
def test = [:]
parts.eachWithIndex{ val, ix -> test[ keys[ ix ] ] = val }
testList << test
}
}
def builder = new JsonBuilder()
def root = builder {
testExecutionKey 'DEMO-303'
info user: 'admin'
tests testList
}
println JsonOutput.prettyPrint(JsonOutput.toJson(root))
谢谢你,你帮了我很多。现在我的问题只是缺少UTF-8编码。你知道如何添加正确的编码吗?(我认为问题在于JsonOutput)我想您的输入文件是一种奇怪的(非UTF-8)格式?分享你的一个文件,这样我就可以尝试它了,例如:testKey;状态PT.49004 Wyszukanie skierowań;帕斯PT.43000 Wyszukanie słów;这并不是真正的“缺少”编码,而是JSON格式的所谓unicode转义。如果您解析回输出,它将是正确的UTF-8@injecter也许你会知道如何将CSV从2个CSV文件解析为JSON?谢谢你,你帮了我很多。现在我的问题只是缺少UTF-8编码。你知道如何添加正确的编码吗?(我认为问题在于JsonOutput)我想您的输入文件是一种奇怪的(非UTF-8)格式?分享你的一个文件,这样我就可以尝试它了,例如:testKey;状态PT.49004 Wyszukanie skierowań;帕斯PT.43000 Wyszukanie słów;这并不是真正的“缺少”编码,而是JSON格式的所谓unicode转义。如果您解析回输出,它将是正确的UTF-8@injecter也许您知道如何从2个CSV文件将CSV解析为JSON?
{
"testExecutionKey": "DEMO-303",
"info": {
"user": "admin"
},
"tests": [
{
"TestKey": "RWS.PT.001",
"Finished": "2020-07-20T23:01:21+02:00",
"user": "admin",
"status": "PASS"
},
{
"TestKey": "RWS.PT.002",
"Finished": "2020-07-20T23:02:21+02:00",
"user": "admin",
"status": "PASS"
}
]
}