parsing - 覆盖 YAML 节点

标签 parsing yaml

我有一个包含一些项目配置的 YAML 文件,我希望重用部分代码以使其易于维护。所以,我尝试使用 anchor 来做到这一点,但我想覆盖以前的节点。这可能吗?

下面是我的例子:

default: &default
    output: &default_output
       make_video: true
       take_screenshot: true
    browser: &default_browser
       type: :chrome
       width: 1024
       height: 1280
    logger: &default_logger
       level: TRACE
       output_type: :file

chrome_browser: &chrome_browser
    <<: *default
    browser:
       type: :chrome
       user_agent: user_agent_string_for_chrome

firefox_browser: &firefox_browser
     <<: *default
     browser: 
         type: :firefox
         user_agent: user_agent_string_for_firefox

好的,这是第一部分:这可能吗? firefox_browser 会覆盖“类型”吗?

现在是第二部分:

profile:
    <<: *default
    staging:
        europe:
            url: www.staging-europe-site.com
            chrome:
                <<: *browser_chrome
            firefox:
                <<: *browser_firefox
        america:
            url: www.staging-america-site.com
            chrome:
                <<: &browser_chrome
            firefox:
                <<: &browser_firefox                    
    live:
        europe:
            url: www.europe-site.com
            chrome:
                <<: &browser_chrome
            firefox:
                <<: &browser_firefox
        america:
            url: www.america-site.com
            chrome:
                <<: &browser_chrome
            firefox:
                <<: &browser_firefox

我可以做这样的事情,以便在阅读 yaml 之后,我可以:

profile_yaml['staging.europe.chrome'] 

我得到了所有的配置?

最佳答案

至于您的第一个问题,这并没有满足您的要求,因为键 browser 的值(来自 default)被替换为 中定义的值>chrome_browser。没有树合并或类似的事情发生。

所以对于你的第二个例子,你最终得到:

output: 
   make_video: true
   take_screenshot: true
logger: 
   level: TRACE
   output_type: :file
browser:
   type: :chrome
   user_agent: user_agent_string_for_chrome

如果您将其转储回 YAML,这可能也缺少。当然还有其他方法可以实现这些目标,但您必须帮助解析器这样做。

关于parsing - 覆盖 YAML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23111733/

相关文章:

kubernetes - 为什么 pod yaml 文件中的容器对象具有 "list value"而不是 "map value"

yaml - 在YAML Front Matter变量中使用液体标签

amazon-web-services - CloudFormation 脚本中的条件 KinesisStreamSpecification

python - 如何使用python获取JSON的二级 key ?

c# - 使用内部节点解析 XML?

c - 在 C 中读取 .csv 文件

python - 在 Python 中解析 YAML 文件并访问数据?

c# - 有没有更快的方法来检查 LINQ to XML 中的 XML 元素?

Python:搜索一对关键字之前和之后的单词

continuous-integration - 如何在 gitlab-ci.yml 文件的 'script' 部分中设置变量