【问题标题】:parsing yaml without creating variables for each parameter解析 yaml 而不为每个参数创建变量
【发布时间】:2021-03-21 23:09:00
【问题描述】:

我对编程还是很陌生,我真的希望有人能帮助我。 我想从 Yaml 文件创建一个地图。问题是,我想让配置哪些参数成为可选,所以我不想创建一个类,其中所有可能的参数都被创建为变量。我以前使用过snakeyaml,但据我所知,这不是snakeyaml 中的选项。

我的 yaml 文件的示例如下所示:

description: linter for microservices
meta:
  pciScope: false
image:
  name: helmcube
  tag: 2.5.4 
service:
  type: 45
deployment:
  replicaCount: 2

你们中有人知道如何实现吗?我已经搜索了几个小时,但找不到与该问题有关的任何内容。 我希望任何人都可以提供帮助

问候

玛丽

【问题讨论】:

  • 如果没有给出的参数在结果对象中只是null 就够了吗?

标签: java spring yaml snakeyaml


【解决方案1】:

获得一个 Properties 实例对您来说就足够了吗?而不是使用定义的变量创建自己的类。

如果你使用 Spring,

public class YamlPropertySourceFactory implements PropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource) 
      throws IOException {
        YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
        factory.setResources(encodedResource.getResource());

        Properties properties = factory.getObject();

        return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties);
    }
}

https://www.baeldung.com/spring-yaml-propertysource

What's the best way to load a yaml file to Map(not an environment configuration file) in spring boot web project?

---已编辑---

你现在有一个属性,你可以反过来得到一个哈希图:

使用外部 Lib Guava,

com.google.common.collect.Maps.fromProperties(Properties)

或者Java方式:

    Map properties = new Properties();
    HashMap<String, String> map = new HashMap<String, String>(properties);

这个 stackoverflow 向您展示了如何将 Properties 转换为 HashMap:

Converting java.util.Properties to HashMap<String,String>

一旦有了配置(字符串)的哈希图,您就可以与另一个配置的哈希图(字符串)进行比较

如果这对您没有帮助,请更新您的问题,并提供明确的激励措施/您想要达到的目标的示例。

【讨论】:

  • 感谢您的建议@Susan Mustafa。是的,我确实使用了 Spring,但据我所知,如果我要使用属性实例,我仍然需要创建变量。问题是我想将配置文件中配置的内容与可以根据可能参数列表配置的内容进行比较,并且我不想为 100 多个可能的参数中的每一个创建单独的变量。
  • @m-schie 我真的很想了解您的要求。您能否在问题中澄清一下,比较的意思是什么,以及您将如何在脑海中进行这种比较?所以我至少可以知道如何帮助你。理想情况下,您从 yml 文件生成一个 Properties x。属性 x 可以给你一张地图。如果你有另一个配置文件?你可以从中得到另一张地图。然后比较两个哈希图?我更新了我的答案,向您展示如何从属性中获取哈希图...
猜你喜欢
  • 1970-01-01
  • 2013-02-28
  • 2014-02-04
  • 1970-01-01
  • 2013-03-10
  • 2014-02-28
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多