Hocon:从配置文件中读取对象数组

Son*_*123 15 configuration json scala playframework playframework-2.1

我已经创建了使用配置在播放应用(2.1)conf/application.confHocon格式.

我想在配置中添加一系列项目.该文件conf/application.conf如下所示:

...
projects = [
  {name: "SO", url: "http://stackoverflow.com/"},
  {name: "google", url: "http://google.com"}
]
Run Code Online (Sandbox Code Playgroud)

我尝试在Scala项目中阅读此配置:

import scala.collection.JavaConversions._
case class Project(name: String, url: String)

val projectList: List[Project] =
  Play.maybeApplication.map{x =>
    val simpleConfig = x.configration.getObjectList("projects").map{y =>
      y.toList.map{z =>
        Project(z.get("name").toString, z.get("url").toString) // ?!? doesn't work

      ... 
   }}}}}}}}  // *arg*
Run Code Online (Sandbox Code Playgroud)

这种方法似乎非常复杂,我很多都丢失了Options,而且我的Eclipse IDE无法给出任何关于类的提示.

有没有人举例说明如何从Hocon配置文件中读取对象数组?或者我应该使用带有JSON解析器而不是Hocon的JSON文件?

And*_*lay 8

以下在Play 2.1.2中为我工作(虽然我没有.maybeApplication关于我的play.Play对象,但我不确定你为什么这样做):

import play.Play
import scala.collection.JavaConversions._
case class Project(name: String, url: String)

val projectList: List[Project] = {
  val projs = Play.application.configuration.getConfigList("projects") map { p => 
    Project(p.getString("name"), p.getString("url")) }
  projs.toList
}

println(projectList)
Run Code Online (Sandbox Code Playgroud)

给出输出:

List(Project(SO,http://stackoverflow.com/), Project(google,http://google.com))
Run Code Online (Sandbox Code Playgroud)

尽管我不会在很多Option实例中迷失(再次,与您似乎拥有的API 不同),但并没有太多不同.

更重要的是,getConfigList似乎与您想要做的事情更接近,因为它返回List[play.Configuration],这使您能够在检索时指定类型而不是诉诸强制转换或.toString()调用.