繁体   English   中英

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

[英]Not able to get a value from yml file in groovy

我已将整个 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

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

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

因此,要么删除-要么使用yamlConfig['services'][0]['name']

yamlConfig.get("services")

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

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

实际上是

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

因此,为了获得某个服务的名称,您需要执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM