简体   繁体   English

在类型安全配置中使用 withFallBack 合并配置中的数组值

[英]Merge array values in configuration using withFallBack in typesafe config

I have some data available as type safe configuration files in HOCON format.我有一些数据可用作 HOCON 格式的类型安全配置文件。

There is a base-file like this :有一个像这样的基本文件:

"data":{
  "k1":{
    "values": ["v1", "v2"]
  },
  "k2":{
    "values": ["x1"]
  },
  "k3":{
    "values": ["z1"]
  }
}

There could be a file which can be used to make some changes, for example during test, like this:可能有一个文件可用于进行一些更改,例如在测试期间,如下所示:

"data":{
  "k1":{
    "values": ["v9"]
  }
}

I am trying to merge these two files using我正在尝试使用合并这两个文件

fileConfig.withFallback(baseFileConfig) fileConfig.withFallback(baseFileConfig)

The end result is:最终结果是:

"data":{
  "k1":{
    "values": ["v9"]  // desired ["v1","v2","v9"]
  },
  "k2":{
    "values": ["x1"]
  },
  "k3":{
    "values": ["z1"]
  }
}

ie the array values for "k1" from the fallBack configuration are ignored.即,后备配置中“k1”的数组值将被忽略。 Is there a way I can get the concatenated array from two files after the merge?有没有办法在合并后从两个文件中获取连接的数组?

for do that you need add ref for values concatenation ( values: ${data.k1.values} ["v9"] ):为此,您需要为值连接添加 ref ( values: ${data.k1.values} ["v9"] ):

lazy val defaultConfig     = ConfigFactory.parseResources("a.conf")
lazy val additionalConfig = ConfigFactory.parseResources("b.conf" )
println(additionalConfig.withFallback(defaultConfig).resolve()) 
// Config(SimpleConfigObject({"data":{"k1":{"values":["v1","v2","v9"]},"k2":{"values":["x1"]},"k3":{"values":["z1"]}}}))

configs:配置:

defaultConfig默认配置

data: {
  k1: {
    values: ["v1", "v2"]
  },
  k2: {
    "values": [
      "x1"
    ]
  },
  k3: {
    "values": [
      "z1"
    ]
  }
}

additionalConfig:附加配置:

data: {
  k1: {
    values: ${data.k1.values} ["v9"]
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM