【问题标题】:How do I parse a YAML file in groovy?如何在 groovy 中解析 YAML 文件?
【发布时间】:2017-06-03 12:26:49
【问题描述】:

如果您有一个名为 example.yaml 的文件,其中包含以下内容: - subject: maths.

- subject后面的字符串如何抓取?

我已经可以读取文件的内容,但想知道如何从中获取特定的字符串。

注意:我知道正则表达式可能会有所帮助,但从未使用过它,希望能得到任何帮助。

【问题讨论】:

  • 拥有一个没有父对象的顶级列表是一个非常不寻常/棘手的 YAML。

标签: groovy yaml


【解决方案1】:

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 的完整文档:

https://bitbucket.org/asomov/snakeyaml/wiki/Documentation

【讨论】:

  • 收到此错误:由于 groovy.lang.GroovyRuntimeException,无法将带有类“java.util.ArrayList”的对象“[{subject=maths}]”转换为类“java.util.Map” :找不到匹配的构造函数:java.util.Map(java.util.LinkedHashMap, java.util.LinkedHashMap) org.codehaus.groovy.runtime.typehandling.GroovyCastException:
  • 您能否发布一个有代表性的 yaml 文件示例?
  • --- - subject: maths(新行)
  • 我更改了示例变量的类型。如果您的 yaml 的格式为 x:y,它将生成一个地图。但是,您的 yaml 格式为 -x:y。这是一组地图
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 2010-12-18
    • 2021-11-04
    • 2022-12-22
    • 2021-12-31
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多