无法从groovy中的yml文件中获取值

时间:2016-10-18 07:32:47

标签: groovy yaml

我已将整个yaml文件存储到Map yamlConfig中,我可以打印并检查。

运行代码时的输出:yamlConfig.each{ k, v -> println "${k}:${v}" }是:

Host:localhost
Port:10000
application:[name:ABC, preferences:[UUID:d3f3278e, server:localhost:2222]]
services:[[name:XYZ, instances:1, start:true]]
dataSets:[[name:ABC], [name:XYZ]]

现在,我正在尝试使用以下代码从Map获取值:

println yamlConfig.get("services").getAt("name")

但是,我得到的值是:[XYZ]。相反,我需要结果为XYZ,没有方括号。

我正在使用的Yml文件:

Host: localhost
Port: 10000
application:
  name: ABC
  preferences:
    UUID: d3f3278e
    server: localhost:2222
services:
  - name: XYZ
    instances: 1
    start: true
data:
  - name: ABC
  - name: XYZ

2 个答案:

答案 0 :(得分:3)

这是因为-属性放在name之前。它使yaml解析器将services部分中的内容视为数组。

当您要求name属性执行yamlConfig['services']['name']时,groovy会为您提供services数组中数组项的所有macthing属性,并且只能在另一个数组中返回它们。

因此,请删除-或使用yamlConfig['services'][0]['name']

答案 1 :(得分:1)

yamlConfig.get("services")

返回列表但不返回服务,因此当您将getAt应用于返回的服务列表时,它会返回一个名称列表。

yamlConfig.get("services").getAt('name')

实际上

yaml['services'].collect { it['name'] }

所以为了得到某个服务的名称,你需要做这样的事情:

println yaml['services'][0]['name']