我在Play for Scala application.conf
中有以下条目:
jobs = [
{number: 0, dir: "/dir1", name: "General" },
{number: 1, dir: "/dir2", name: "Customers" }
]
我想在Scala程序中检索以下对象列表:
val conf = ConfigFactory.load
val jobs = conf.getAnyRefList("jobs").asScala
println(jobs)
此打印
Buffer({number=0, name=General, dir=/dir1}, {number=1, name=Customers, dir=/dir2})
但是如何将结果转换为实际的Scala对象?
答案 0 :(得分:3)
尝试这个:
case class Job(number: Int, dir: String, name: String)
object Job {
implicit val configLoader: ConfigLoader[List[Job]] = ConfigLoader(_.getConfigList).map(
_.asScala.toList.map(config =>
Job(
config.getInt("number"),
config.getString("dir"),
config.getString("name")
)
)
)
}
然后来自Confuctation DI
Configuration.get[List[Job]]("jobs")
答案 1 :(得分:0)
这里是一个Config
对象,它将从配置文件中提取数据到您指定的类型。
用法:
case class Job(number: Int, dir: String, name: String)
val jobs = Config[List[Job]]("jobs")
代码:
import com.typesafe.config._
import org.json4s._
import org.json4s.jackson.JsonMethods._
object Config {
private val conf = ConfigFactory.load()
private val jData = parse(conf.root.render(ConfigRenderOptions.concise))
def apply[T](name: String)(implicit formats: Formats = DefaultFormats, mf: Manifest[T]): T =
Extraction.extract(jData \\ name)(formats, mf)
}
如果特定的配置对象不存在或与T
的格式不匹配,将抛出异常。