Java 和 YAML:如何解析多个 yaml 文档并将它们合并为单个 YAML 表示?

     2023-02-23     190

关键词:

【中文标题】Java 和 YAML:如何解析多个 yaml 文档并将它们合并为单个 YAML 表示?【英文标题】:Java and YAML: how to parse multiple yaml documents and merge them to a single YAML representation? 【发布时间】:2014-12-08 07:47:01 【问题描述】:

假设我有一个文件,defaults.yaml:

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: dev
  password: dev_password

还有另一个文件,production.yaml:

pool:
  username: prod
  password: prod_password

在运行时,我如何读取这两个文件并将它们合并为一个,以便应用程序“看到”以下内容?

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: prod
  password: prod_password

这可以通过 SnakeYAML 实现吗?还有其他工具吗?

我知道一种选择是将多个文件作为 Maps 读取,然后自己合并它们,将合并呈现为单个临时文件,然后读取它,但这是一个重量级的解决方案。现有工具可以做到这一点吗?

【问题讨论】:

我认为现有的工具不会做任何比你想做的更“重量级”的事情——不过,另一种选择是跳过临时文件,只在内存中合并地图。 【参考方案1】:

您可以使用 Jackson,关键是使用 ObjectMapper.readerForUpdating() 并使用 @JsonMerge 注释字段(否则下一个对象中所有缺少的字段将覆盖旧的):

马文:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.9.9</version>
    </dependency>

代码:

public class TestJackson 
    public static void main(String[] args) throws IOException 
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
        MyConfig myConfig = new MyConfig();
        ObjectReader objectReader = mapper.readerForUpdating(myConfig);
        objectReader.readValue(new File("misc/a.yaml"));
        objectReader.readValue(new File("misc/b.yaml"));
        System.out.println(myConfig);
    

    @Data
    public static class MyConfig 
        @JsonMerge
        private Pool pool;
    

    @Data
    public static class Pool 
        private Integer idleConnectionTestPeriodSeconds;
        private Integer idleMaxAgeInMinutes;
        private Integer partitionCount;
        private Integer acquireIncrement;
        private String username;
        private String password;
    

【讨论】:

终于!五年后的答案!!! :) 它仍然受到赞赏 - 答案被授予。谢谢!

在 Java 中解析 YAML 前端

...我无法理解它(我不太了解红宝石)。所以我的问题是,如何在java中解析YAMLFrontMatter?我的类路径中有snakeyaml,我将从降价文件中解析YAM 查看详情

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

】如何将yaml文件解析为ruby​​哈希和/或数组?【英文标题】:Howtoparseayamlfileintorubyhashsand/orarrays?【发布时间】:2011-03-2917:47:13【问题描述】:我需要将yaml文件加载到哈希中,我该怎么办?【问题讨论】:请更新您选择的答案... 查看详情

如何使用 yaml-cpp 发出和解析原始二进制数据

】如何使用yaml-cpp发出和解析原始二进制数据【英文标题】:How-toemitandparserawbinarydatausingyaml-cpp【发布时间】:2010-10-2819:13:23【问题描述】:是否可以发出和读取(解析)二进制数据(图像、文件等)?像这样显示在这里:http://y... 查看详情

多个 Spring 配置文件的属性解析(yaml 配置)

】多个Spring配置文件的属性解析(yaml配置)【英文标题】:PropertyresolvingformultipleSpringprofiles(yamlconfiguration)【发布时间】:2020-06-0513:16:33【问题描述】:当多个配置文件用于属性解析时是否有定义的顺序。我有yaml配置文件:name:n... 查看详情

如何从使用 python 解析的 yaml 文件中调用和迭代值?

】如何从使用python解析的yaml文件中调用和迭代值?【英文标题】:Howtocallanditeratevaluesfromayamlfileparsedusingpython?【发布时间】:2018-10-0717:08:52【问题描述】:我有一个yaml文件如下:server1:host:os1ip:##.###.#.##path:/var/log/syslogfile:syslogiden... 查看详情

如何在不知道终端标量的映射和类型中的键的情况下使用 yaml-cpp 库解析任意 yaml 文件?

】如何在不知道终端标量的映射和类型中的键的情况下使用yaml-cpp库解析任意yaml文件?【英文标题】:Howtoparsearbitraryyamlfilewithyaml-cpplibrarywithoutknowingkeysinmappingsandtypesoftheterminalscalars?【发布时间】:2020-03-0412:31:03【问题描述】:... 查看详情

如果有“!”,如何使用 PyYAML 解析 YAML在 YAML 中

】如果有“!”,如何使用PyYAML解析YAML在YAML中【英文标题】:HowtoParseYAMLUsingPyYAMLifthereare\'!\'withintheYAML【发布时间】:2019-02-1320:53:53【问题描述】:我有一个YAML文件,我只想解析description变量;但是,我知道我的CloudFormation模板... 查看详情

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

...L文件和使用/访问解析后的YAML数据的方法。我遇到过关于如何解析YAML文件的解释,例如PyYAMLtutorial、“HowcanIparseaYAMLfileinPython”、“C 查看详情

我如何在 Java 编程中验证 YAML 结构

】我如何在Java编程中验证YAML结构【英文标题】:HowcouldIvalidateaYAMLstructureinjavaprogramming【发布时间】:2016-01-0413:51:34【问题描述】:我的目录中有一个YAML文件,我想使用java编程验证YAML文件的结构是否正确。在网上它有很多YAML检... 查看详情

yaml文件解析(代码片段)

文章目录yaml文件解析YAML语法格式查看api资源版本标签写一个nignx.yaml文件demo编写service服务的资源清单用--dry-run命令生成yaml资源清单将现有的资源生成模板导出生成yaml文件yaml文件解析Kubernetes支持YAML和JSON格式管理资源对象JSON格... 查看详情

yaml文件解析(代码片段)

文章目录yaml文件解析YAML语法格式查看api资源版本标签写一个nignx.yaml文件demo编写service服务的资源清单用--dry-run命令生成yaml资源清单将现有的资源生成模板导出生成yaml文件yaml文件解析Kubernetes支持YAML和JSON格式管理资源对象JSON格... 查看详情

yaml文件解析(代码片段)

文章目录yaml文件解析YAML语法格式查看api资源版本标签写一个nignx.yaml文件demo编写service服务的资源清单用--dry-run命令生成yaml资源清单将现有的资源生成模板导出生成yaml文件yaml文件解析Kubernetes支持YAML和JSON格式管理资源对象JSON格... 查看详情

解析 YAML 文件?

...rsingaYAMLfile?【发布时间】:2020-08-1321:08:58【问题描述】:如何使用yaml-cpp解析以下YAML文件?scene:-camera:film:width:800height:600filename:"out.svg"-shape:name:"muh"我试过了:#include<yaml-cpp/yaml.h>intmain()YAML::Noderoo 查看详情

如何在 azure devops 中解析 yaml 文件

】如何在azuredevops中解析yaml文件【英文标题】:Howtopossibleparseyamlfileinazuredevops【发布时间】:2021-12-3103:40:09【问题描述】:如何解析yaml文件以从中提取appVersion?我可以将文件内容与文件内容一起读取到变量中以获取所有内容但... 查看详情

如何在浏览器中解析 YAML? [复制]

】如何在浏览器中解析YAML?[复制]【英文标题】:HowtoparseYAMLinthebrowser?[duplicate]【发布时间】:2012-02-2101:26:49【问题描述】:我想在浏览器中解析YAML。理想情况下,我正在寻找一个支持浏览器的库。我发现的那些不是为了在浏览... 查看详情

如何将 YAML 文件解析/读取到 Python 对象中?

】如何将YAML文件解析/读取到Python对象中?【英文标题】:Howtoparse/readaYAMLfileintoaPythonobject?【发布时间】:2011-10-1513:07:48【问题描述】:例如,这个YAML:Person:name:XYZ到这个Python类:classPerson(yaml.YAMLObject):yaml_tag=\'Person\'def__init__(sel... 查看详情

如何将yaml文件拆分为多个文件?

】如何将yaml文件拆分为多个文件?【英文标题】:Howtosplityamlfileintoseveralfiles?【发布时间】:2017-03-2716:05:10【问题描述】:我有一个大(~2Gb)yaml文件。我使用yaml-cpp库和YAML::Loadfile函数。但是我有一个内存不足的问题。将这个文件... 查看详情

解析yaml python [关闭]

...6:53:51【问题描述】:yaml标记中有一个文件a:b:xtest2testtest3如何使用python(2.7.x)和PyYAML获取x?【问题讨论】:【参考方案1】:你不能!您发布的YAML会生成一个仅包含一个键a的字典,该键映射到值"b:xtest2testtest3"-您 查看详情