【发布时间】:2017-06-03 12:26:49
【问题描述】:
如果您有一个名为 example.yaml 的文件,其中包含以下内容:
- subject: maths.
- subject后面的字符串如何抓取?
我已经可以读取文件的内容,但想知道如何从中获取特定的字符串。
注意:我知道正则表达式可能会有所帮助,但从未使用过它,希望能得到任何帮助。
【问题讨论】:
-
拥有一个没有父对象的顶级列表是一个非常不寻常/棘手的 YAML。
如果您有一个名为 example.yaml 的文件,其中包含以下内容:
- subject: maths.
- subject后面的字符串如何抓取?
我已经可以读取文件的内容,但想知道如何从中获取特定的字符串。
注意:我知道正则表达式可能会有所帮助,但从未使用过它,希望能得到任何帮助。
【问题讨论】:
2021 年 12 月更新: Bitbucket 上无法再访问 SnakeYAML 项目的文档,并且快速的谷歌搜索没有显示任何替代存储库,所以我猜这个项目要么已经关闭源代码,要么已经死亡。
所以我在这里添加相同的示例,但使用本机 YAMLSlurper (Groovy 3.x+) 实现:
import groovy.yaml.YamlSlurper
def exampleYaml = '''\
---
- subject: "maths"
- subject: "chemistry"
'''
List example = new YamlSlurper().parseText(exampleYaml)
//If your source is a File
// List example = new YamlSlurper().parse("example.yaml" as File)
example.each{println it.subject}
对于以前的版本(原始答案):
snakeyaml 是一个解析 YAML 文件的库。易于在 groovy 中使用。
更新:将示例变量的类型更改为列表,因为示例文件的顶级元素是一个集合
@Grab('org.yaml:snakeyaml:1.17')
import org.yaml.snakeyaml.Yaml
Yaml parser = new Yaml()
List example = parser.load(("example.yaml" as File).text)
example.each{println it.subject}
snakeyaml 的完整文档:
【讨论】:
--- - subject: maths(新行)
FWIW,即将到来的(在撰写本文时)Groovy 3.0 版直接支持 yaml: http://docs.groovy-lang.org/next/html/api/groovy/yaml/package-summary.html 与传统的 YamlSlurper / YamlBuilder 组合 您可以随时切换到这个尚未正式发布的版本。
[已编辑] 3.0.x 版本现已正式发布,带有 groovy.yaml 包 http://docs.groovy-lang.org/latest/html/api/groovy/yaml/package-summary.html
【讨论】: