我可以在groovy中将Json.Builder与JsonOutput结合起来吗?CSV到JSON

我可以在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 =

我必须在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 = 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"
        }
    ]
}