Groovy 映射:获取列的所有值
Posted
技术标签:
【中文标题】Groovy 映射:获取列的所有值【英文标题】:Groovy Mapping : Get all the values of a column 【发布时间】:2022-01-06 07:19:21 【问题描述】:我有一个如下的 json,我正在尝试使用 Groovy 获取所有“开发”主机的列表。 我怎样才能做到这一点 ?我附上了我目前正在使用的示例代码,但由于明显的原因它不起作用。我是 Groovy 的新手。
"app1":
"dev": [
"host1",
"host2"
],
"qa": null,
"uat": [
"host11"
]
,
"app2":
"qa": null,
"stable": null,
"dev": [
"host3",
"host4"
]
代码:
apiResponse = <Code which returns the json as mentioned above>
def parser = new JsonSlurper()
def host_list = parser.parseText(apiResponse)
dev_hosts = host_list[]['dev']
print dev_hosts
预期结果:
['host1','host2','host3','host4']
【问题讨论】:
【参考方案1】:有很多方法可以做到这一点,最好的方法可能取决于了解更多关于*** JSON 文档中有多少对象等的常见使用模式,但以下方法确实起作用:
String jsonInput = """
"app1":
"dev": [
"host1",
"host2"
],
"qa": null,
"uat": [
"host11"
]
,
"app2":
"qa": null,
"stable": null,
"dev": [
"host3",
"host4"
]
"""
def object = new JsonSlurper().parseText(jsonInput)
def results = object.collect it.value.dev .flatten()
assert results == ['host1', 'host2', 'host3', 'host4']
【讨论】:
【参考方案2】:def dev_hosts = host_list.values().collectManyit['dev']
编辑:OP 调整了规格:dev
应该是一个变量并且列表
需要展平(大概在第一级)。
【讨论】:
如何将'dev'作为参数传递给命令? @SujeetPadhi 答案已更新为新规范以上是关于Groovy 映射:获取列的所有值的主要内容,如果未能解决你的问题,请参考以下文章
Django Query 获取 ArrayField 列的所有不同值的计数
Hibernate / JPA在合并后获取数据库中具有默认值的列的值