Groovy манипуляции со строками на плоской карте

Я пишу код для своего рабочего процесса Nextflow, который использует groovy.

У меня есть файл конфигурации JSON со следующими параметрами:

"barcodes": {
    "004F--004R": {
        "laa_params": {
            "--minLength": "5000",
            "--ignoreEnds": "60",
            "--maxReads": "2500",
            "--maxPhasingReads": "500"
        }
    },
    "014F--014R": {
        "laa_params": {
            "--minLength": "5000",
            "--ignoreEnds": "60",
            "--maxReads": "2500",
            "--maxPhasingReads": "500"
        }
    },

И что мне нужно сделать, это сделать карту штрих-кода: laa_params. В настоящее время я делаю это:

transform_barcodes = barcodes.flatMap { it ->  [it] }
results = transform_barcodes.flatMap { it ->  [ [it, analysis_config.barcodes[it].laa_params] ] }

И это дает мне следующие результаты:

DataflowQueue(queue=[DataflowVariable(value=[004F--004R, {--minLength=5000, --ignoreEnds=60, --maxReads=2500, --maxPhasingReads=500}]), DataflowVariable(value=[014F--014R, {--minLength=5000, --ignoreEnds=60, --maxReads=2500, --maxPhasingReads=500}]),...

Что мне нужно в конечном итоге:

[004F--004R, {--minLength 5000, --ignoreEnds 60, --maxReads 2500, --maxPhasingReads 500}]

Как я могу сделать это так? Я новичок в groovy, но, вероятно, просто выполните цикл for по карте и замените = на? Любая помощь будет оценена по достоинству!


person DUDANF    schedule 05.08.2020    source источник
comment
вы хотите преобразовать этот json в обычный текст?   -  person daggett    schedule 05.08.2020
comment
Я использую этот JSON для запуска некоторых аргументов командной строки. Итак, я хочу преобразовать laa_params в текст, да. Это будет работать так python script.py -bc 004F--004R -p "all laa_params"   -  person DUDANF    schedule 05.08.2020


Ответы (1)


def json = '''
{
    "barcodes": {
        "004F--004R": {
            "laa_params": {
                "--minLength": "5000",
                "--ignoreEnds": "60",
                "--maxReads": "2500",
                "--maxPhasingReads": "500"
            }
        },
        "014F--014R": {
            "laa_params": {
                "--minLength": "5000",
                "--ignoreEnds": "60",
                "--maxReads": "2500",
                "--maxPhasingReads": "500"
            }
        }
    }
}
'''
json = new groovy.json.JsonSlurper().parseText(json)
def plainMap = json.barcodes.collectEntries{k0,v0-> [k0, v0.laa_params.collect{k1,v1-> "$k1 $v1" }.join(' ') ]}

plainMap.each{k,v-> 
    println "$k :: $v"
}

отпечатки

004F--004R :: --minLength 5000 --ignoreEnds 60 --maxReads 2500 --maxPhasingReads 500
014F--014R :: --minLength 5000 --ignoreEnds 60 --maxReads 2500 --maxPhasingReads 500
person daggett    schedule 05.08.2020