我已将整个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
答案 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']