python - 将 Python 转换为 Groovy - 嵌套 JSON
问题描述
我正在使用 Nextflow 实施工作流程。Nextflow 使用 groovy 作为它的基础语言,然后每个进程可以独立使用任何编程语言。我本质上是一名 Python 程序员,所以我编写的代码是用 Python 编写的。并且在转换语言时遇到了一些麻烦。
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"
}
}
}
}
CNS_PARAM_LIST = []
my_dict = {}
for each in data["c"]:
for k, v in data["c"][each].get('params', {}).items():
CNS_PARAM_LIST.extend([k, str(v)])
my_dict[each] = CNS_PARAM_LIST
print(my_dict)
基本上,我有一个 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 编码器都可以在 1/100 的时间内破解它?我相信还有一些方法可以使这段代码更高效,欢迎任何想法!
解决方案
我猜你只是在每个 somename 的重复键时拼写错误
groovy 中的第一个差异是如何声明地图(python 中的字典)
my_dict = [:]
有关 groovy 集合的更多信息,您可以在此处找到:http ://docs.groovy-lang.org/next/html/documentation/working-with-collections.html
您的案例的代码:
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)
我在 Map 对象上使用collectEntries方法
您可以在 GDK 文档中找到其他 Map 方法:groovy Map just google gdk map
只要 groovy Map 扩展 java Map 检查 javadoc 中的主要方法:java Map
推荐阅读
- javascript - 使用 Vue.js 和 express.js 交付 Html 文件
- c++ - UE4 将 Actor 指针设置为 null 而不会在世界中销毁它
- ghostscript - windows的ghostscript:横向PDF显示
- ios - Swift:应用程序因 EXC_BAD_INSTRUCTION 错误而崩溃?
- javascript - React Error Unhandled Rejection (TypeError): api_call.json 不是一个函数。拿来?异步?
- python - Pygame玩家精灵没有出现
- mysql - 将 CHAR 列转换为 MySQL 中的 DATETIME 列
- aws-lambda - 通过 Alexa 技能包的 aws-lambda 函数在插槽/意图之间调用/切换
- android - 安装我的应用程序时解析包时出错
- algorithm - n维点的凸包中的最大单纯形