将Python转换为Groovy嵌套的JSON
我正在使用Nextflow实现工作流。Nextflow使用groovy作为基础语言,然后每个进程都可以独立使用任何编程语言。我本质上是一个Python程序员,所以我写的代码是用Python编写的。我在转换语言方面有点困难将Python转换为Groovy嵌套的JSON,python,json,dictionary,groovy,Python,Json,Dictionary,Groovy,我正在使用Nextflow实现工作流。Nextflow使用groovy作为基础语言,然后每个进程都可以独立使用任何编程语言。我本质上是一个Python程序员,所以我写的代码是用Python编写的。我在转换语言方面有点困难 数据={ “a”:“a”, “b”:“b”, “c”:{ “somename”:{ “z”:“z”, “y”:“y”, “参数”:{ “最低”:“3000”, “忽略”:“60”, “最大值”:“2500”, “最大值”:“500” } }, “somename2”:{ “z”
数据={
“a”:“a”,
“b”:“b”,
“c”:{
“somename”:{
“z”:“z”,
“y”:“y”,
“参数”:{
“最低”:“3000”,
“忽略”:“60”,
“最大值”:“2500”,
“最大值”:“500”
}
},
“somename2”:{
“z”:“z”,
“y”:“y”,
“参数”:{
“最低”:“3000”,
“忽略”:“60”,
“最大值”:“2500”,
“最大值”:“500”
}
}
}
}
CNS参数列表=[]
我的字典={}
对于数据[“c”]中的每一项:
对于k,数据[“c”][each].get('params',{}.items()中的v:
CNS参数列表扩展([k,str(v)])
我的目录[每个]=CNS参数列表
打印(我的字典)
基本上,我有一个JSON(数据),我需要从一些嵌套字段创建一个字典。上述代码的输出为:
{'somename': ['minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500', 'minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500'], 'somename2': ['minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500', 'minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500']}
简单地说,将somename
和somename2
作为键,并将params
作为值
有哪位groovy程序员能在我能做到的百分之一的时间内破解这个问题?我相信还有一些方法可以使这段代码更高效,欢迎任何想法 我猜你只是拼错了每个somename的重复键 groovy中的第一个区别是如何声明映射(python中的字典) 有关groovy集合的更多信息,您可以在此处找到: 您的案例代码:
def data = [
"a" : "A",
"b" : "B",
"c" : [
"somename":[
"z" : "Z",
"y" : "Y",
"params" :[
"minimum": "3000",
"ignore": "60",
"maximum_A": "2500",
"maximum_B": "500"
]
],
"somename2":[
"z" : "Z",
"y" : "Y",
"params" :[
"minimum": "3000",
"ignore": "60",
"maximum_A": "2500",
"maximum_B": "500"
]
]
]
]
def my_dict = data.c.collectEntries{k,v-> [k,v.params] }
println my_dict
//if you want to print it as json:
println groovy.json.JsonOutput.toJson(my_dict)
我正在地图对象上使用方法
您可以在GDK文档中找到其他用于映射的方法:只需谷歌
groovy Map一扩展java Map,就检查javadoc中的主要方法:比什么更有效?请提供您尝试过的Groovy代码,以便我们对其进行改进。谢谢您,先生,简洁高效!
def data = [
"a" : "A",
"b" : "B",
"c" : [
"somename":[
"z" : "Z",
"y" : "Y",
"params" :[
"minimum": "3000",
"ignore": "60",
"maximum_A": "2500",
"maximum_B": "500"
]
],
"somename2":[
"z" : "Z",
"y" : "Y",
"params" :[
"minimum": "3000",
"ignore": "60",
"maximum_A": "2500",
"maximum_B": "500"
]
]
]
]
def my_dict = data.c.collectEntries{k,v-> [k,v.params] }
println my_dict
//if you want to print it as json:
println groovy.json.JsonOutput.toJson(my_dict)