获取类型安全的配置值作为大小写数组 class

Get typesafe config value as Array of Case class

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

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

假设我有一个案例 class 如下所示,

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

我试图将配置值设置为

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

我 运行 下面的代码没有以预期的格式返回数据。我收到错误 "missed parameter type for expanded function"。

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

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

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

.map 中,您将配置作为参数传递给 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 键。