0

我有一个如下所示的配置文件:

{
    "codes": {
        "0004F--0004R": {
            "Forward code Name": "0004F",
            "Forward code Info": "xxxyyy4",
            "Rev code Name": "0004R",
            "Rev code Info": "xxxyyy3"
        },
        "0014F--0014R": {
            "Forward code Name": "0014F",
            "Forward code Info": "xxxyyy1",
            "Rev Barcode Name": "0014R",
            "Rev Barcode Info": "xxxyyy2"

        }
    }
}

我需要处理这个 json,以便得到一个如下所示的输出“fasta”文件:

>0004F
xxxyyy4
>0004R
xxxyyy3
>0014F
xxxyyy1
>0014R
xxxyyy2

我本质上是一个 python 程序员,所以在 python 中我的代码如下所示:

with open('codes.fasta', 'w') as f:
    for k, v in json_object.get('codes', {}).items():
        fname, revname = k.split('--')
        print(f'>{fname}\n{v["Forward code Info"]}', file=f)
        print(f'>{revname}\n{v["Rev code Info"]}', file=f) 

我需要在 Groovy 中编写一个类似的函数。

在伪代码中: 1. 给出 config.json 2. Groovy 读取 JSON 3. 相应地解析 JSON 4. 输出“fasta”文件

这里有任何 Groovy 编码器吗?

4

1 回答 1

2
import groovy.json.*

def jsonObject = new JsonSlurper().parseText '''{
    "codes": {
        "0004F--0004R": {
            "Forward code Name": "0004F",
            "Forward code Info": "xxxyyy4",
            "Rev code Name": "0004R",
            "Rev code Info": "xxxyyy3"
        },
        "0014F--0014R": {
            "Forward code Name": "0014F",
            "Forward code Info": "xxxyyy1",
            "Rev Barcode Name": "0014R",
            "Rev Barcode Info": "xxxyyy2"

        }
    }
}'''

new File('codes.fasta').withOutputStream { out ->
    jsonObject.codes.each { code -> 
        def (fname, revname) = code.key.split('--')
        out << ">$fname\n${code.value['Forward code Info']}\n"
        out << ">$revname\n${code.value['Rev Barcode Info']}\n"
    }
}

您可以以非常类似的方式编写 Groovy。

而不是使用解析,parseText您可能想要调用parse(new File(config.json)或其他类似的API 方法

于 2019-10-07T16:36:58.427 回答