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 映射:获取列的所有值的主要内容,如果未能解决你的问题,请参考以下文章

获取DataTable某一列的所有值

使用Groovy中的字符串访问地图映射的元素

Django Query 获取 ArrayField 列的所有不同值的计数

Hibernate / JPA在合并后获取数据库中具有默认值的列的值

Django Query以获取特定列的所有不同值的计数[重复]

有没有办法从 BigQuery 的表中获取所有列的不同值?