获取typesafe配置值作为Array类的Array

时间:2018-04-18 17:05:02

标签: scala scala-collections

我有一个如下HOCON Config格式的conf文件。

mapConfig :[
    { name = "AAA", value = "BBBB" },
    { name = "CCC", value ="DDD" },
    { name = "EEE", value ="FFF"}]

假设我有一个类似下面的案例类,

case class ConfigData (val name: String, val value: String)

我试图将配置值设为

Array [ConfigData["AAA","BBBB"], ConfigData["CCC","DDD"],ConfigData["EEE","FFF"]]

我运行了以下代码,该代码未以预期格式返回数据。我收到错误“为扩展功能错过了参数类型”。

val config = ConfigFactory.parseResources("config-prop")
val configArray = config.getConfigList("mapConfig").asScala.map (ConfigData (_,_) )

如何解决此问题并获得所需格式的值?

1 个答案:

答案 0 :(得分:1)

config.getConfigList("mapConfig").asScala.map (ConfigData (_,_) )

.map中,您将config作为参数传递给ConfigData(_, _),它需要2个参数。

我猜是这样的:

config.getConfigList("mapConfig").asScala.map { config =>
   val name = config.getString("name")
   val value = config.getString("value")
   ConfigData(name, value)
}

会更好。替代https://github.com/pureconfig/pureconfig您可以:

case class ConfigData(val name: String, val value: String)
case class ConfigList(mapConfig: List[ConfigData])

pureconfig.loadConfig[ConfigList] // Either[pureconfig.error.ConfigReaderFailures, ConfigList]

但是,默认情况下,它需要一些约定,因此预计您的配置会使用map-config而不是mapConfig密钥。