【问题标题】:Using Groovy 3 YamlBuilder with Yaml that contains a hyphen将 Groovy 3 YamlBuilder 与包含连字符的 Yaml 一起使用
【发布时间】:2020-03-03 16:29:11
【问题描述】:

我正在尝试编写一个使用 yamlbuilder 编写 yaml 文件的 Groovy 3 脚本。除了;

execution:
  set-props:
    url:http://myhouse.net
    port:8000

如何编写允许在名称中使用连字符的映射?在我之前的工作之后,我愚蠢地尝试了;

def setprops=[:]
setprops=(["url":"http://myhouse.net","port":"8000"])
execution.set-props=setprops

这给了我一个错误“赋值的 LHS 应该是一个变量或一个字段”。

如果我只使用 execution.setprops 那么它可以正常工作,但是从 yaml(execution) 生成的 yaml 当然是无效的。

我认为如果 set-props 是一个键/值对,那么它可以被引用,一切都会好起来的。但因为它是结构的一部分,我不知道需要做什么。

【问题讨论】:

    标签: groovy yaml


    【解决方案1】:

    您可以使用字符串作为“方法”,构建器将创建您的 它们的中间结构:

    import groovy.yaml.YamlBuilder
    
    def b = new YamlBuilder()
    
    b.execution {
        "set-props"(
            url: "..."
        )
    }
    
    println b
    

    或者继续您的示例:您可以创建整个地图并使用 is 作为参数,您希望在其中拥有该内容。

    def setprops=["set-props": [url:"..."]]
    b.execution(setprops)
    

    两者都导致:

    ---
    execution:
      set-props:
        url: "..."
    

    请注意,第一个版本通过传递的闭包嵌套,然后传入映射。第二位只是传递一个嵌套映射。

    【讨论】:

    • 啊,所以这改变了我在代码中更早的方法。对我来说,我正在定义一个 Groovy 地图,其中包含相关的地图/列表,具体取决于 yaml 的要求。但是您从 yamlbuilder 而不是地图开始,然后将地图传递给它。我将尝试从 yamlbuilder 开始,但是如果 b 是地图而不是 yamlbuilder,您的解决方案将如何改变?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多