16

Hocon 形式の構成を使用する Play アプリケーション (2.1) を作成しましconf/application.confた。

構成にプロジェクトの配列を追加したい。ファイルconf/application.confは次のようになります。

...
projects = [
  {name: "SO", url: "http://stackoverflow.com/"},
  {name: "google", url: "http://google.com"}
]

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*

このアプローチは非常に複雑に思えます。私は多くのことで迷っておりOptions、私の Eclipse IDE ではクラスに関するヒントが得られません。

Hocon構成ファイルからオブジェクトの配列を読み取る方法の例はありますか? または、Hocon の代わりに JSON パーサーを使用した JSON ファイルを使用する必要がありますか?

4

4 に答える 4

2

通常の HOCON 構成の場合、strangefeatures の回答と同様に、これは機能します

import javax.inject._
import play.api.Configuration

trait Barfoo {
  def configuration: Configuration     
  def projects = for {
    projectsFound <- configuration.getConfigList("projects").toList
    projectConfig <- projectsFound
    name <- projectConfig.getString("name").toList
    url  <- projectConfig.getString("url").toList
  } yield Project(name,url)
}

class Foobar @Inject() (val configuration: Configuration) extends Barfoo

(Play 2.4+ インジェクションを使用)

于 2016-05-16T15:32:32.003 に答える
2

この部分で何を達成しようとしていますy.toList.map{z =>か? 結果としてのコレクションが必要な場合は、次のProjectようにしてください。

val simpleConfig = x.configration.getObjectList("projects").map{y =>
   Project(y.get("name").toString, y.get("url").toString)
}

この場合、操作はwhich is what ismapのインスタンスを取る必要があります。インスタンスを取得するために必要なのはこれだけのように思われるので、なぜそれ( ) を List に入れ、それをさらにマッピングするのかわかりません。ConfigObjectyProjecttoListConfigObjectMapTuple2

于 2013-06-19T16:27:32.817 に答える
1

配列の内容が Json であり、ケース クラスがある場合、Json Play APIを使用して、その方法でオブジェクトを操作することができます。インセプション部分はそれを簡単にする必要があります。

于 2013-06-19T16:20:44.250 に答える