Помогите разобрать CSV до JSON из 2 файлов в groovy. У меня такой 1-й CSV (номера строк каждый раз могут быть разными):
testKey, status
Name001-something, PASS
Name002-something, PASS
Name003-something, FAIL
CSV2 (список всех тестовых ключей, но с разными именами ключей:
Kt, Pd
PT-01, Name007-something1
PT-02, Name001-something2
PT-03, Name003-something3
PT-05, Name002-something5
PT-06, Name004- something5
PT-07, Name006-something5
Этот код анализирует только одно и то же значение, но мне также нужен testKey, даже если первые 7 знаков одинаковы в обоих файлах. Возможно, substring (0, 6)?
import groovy.json.*
def csv1 = '''
testKey,status
Name001-something,PASS
Name002-something,PASS
Name003-something,FAIL
Name004-something,FAIL
'''.trim()
def csv2 = '''
Kt,Pd
PT-01,Name007-something1
PT-02,Name001-something2
PT-03,Name003-something3
PT-05,Name002-something4
PT-06,Name004-something5
PT-07,Name006-something6
'''.trim()
boolean skip1st = false
def testMap2 = [:]
//parse and bind 1st CSV to Map
csv2.splitEachLine( /\s*,\s*/ ){
skip1st ? ( testMap2[ it[ 1 ] ] = it[ 0 ] ) : ( skip1st = true )
}
def keys
def testList = []
csv1.splitEachLine( /\s*,\s*/ ){ parts ->
if( !keys )
keys = parts*.trim()
else{
def test = [:]
parts.eachWithIndex{ val, ix -> test[ keys[ ix ] ] = val }
//check if testKey present in csv2
if( testMap2[ test.testKey ] ){
test.testKey = testMap2[ test.testKey ] // replace values from CSV2
testList << test
}
}
}
def builder = new JsonBuilder()
def root = builder {
testExecutionKey 'DEMO-303'
info user: 'admin'
tests testList
}
builder.toPrettyString()
результат:
{
"testExecutionKey": "DEMO-303",
"info": {
"user": "admin"
},
"tests": [
]
}
В результате мне нужно что-то вроде:
{
"testExecutionKey": "DEMO-303",
"info": {
"user": "admin"
},
"tests": [
{
"testKey": "PT-02",
"status": "PASS"
},
{
"testKey": "PT-05",
"status": "PASS"
},
{
"testKey": "PT-03",
"status": "FAIL"
},
{
"testKey": "PT-06",
"status": "FAIL"
}
]
}