私はperks.confを持っています:
_autoshield {
name="autoshield"
price=2
description="autoshield description"
}
immunity {
name="immunity"
price=2
description="autoshield description"
}
premium {
name="premium"
price=2
description="premium description"
}
starter {
name="starter"
price=2
description="starter description"
}
jetpack {
name="jetpack"
price=2
description="jetpack description"
}
_
そして、次のようなアプリケーションで特典を繰り返し処理したいと思います。
_val conf: Config = ConfigFactory.load("perks.conf")
val entries = conf.getEntries()
for (entry <- entries) yield {
Perk(entry.getString("name"), entry.getInt("price"), entry.getString("description"))
}
_
しかし、configからすべてのエントリを返す適切なメソッドが見つかりません。 config.root()
を試しましたが、system、akka、その他多くのプロパティを含むすべてのプロパティが返されるようです。
たとえば、_Settings.scala
_に次のコードがあります
_val conf = ConfigFactory.load("perks.conf")
_
ルート構成でentrySet
を呼び出すと(conf.root()
ではなく、この構成のルートオブジェクト)、多くのガベージが返されます。必要なのは、すべての特典をいくつかの下に置くことです。 perks.confのパス:
_perks {
autoshield {
name="autoshield"
price=2
description="autoshield description"
}
immunity {
name="immunity"
price=2
description="autoshield description"
}
}
_
次に、_Settings.scala
_ファイルで次の構成を取得します。
_val conf = ConfigFactory.load("perks.conf").getConfig("perks")
_
次に、この構成でentrySetを呼び出すと、ルートオブジェクトからではなく、特典からすべてのエントリを取得します。 TypesafeConfigはJavaで記述され、entrySetは_Java.util.Set
_を返すため、_scala.collection.JavaConversions._
_をインポートする必要があることを忘れないでください。
entrySet
はツリーを折りたたみます。直接の子のみを反復処理する場合は、次を使用します。
conf.getObject("perks").asScala.foreach({ case (k, v) => ... })
k
は「autoshield」と「immunity」になりますが、「autoshield.name」、「autoshield.price」などにはなりません。
これには、scala.collection.JavaConverters._
をインポートする必要があります。
getObject
は私に修飾されたjsonオブジェクトを与えました(例えば、timeout.ms = 5
は{ timeout: { ms: 5 }
になります)。
私は結局:
conf.getConfig(baseKey).entrySet().foreach { entry =>
println(s"${entry.getKey} = ${entry.getValue.unwrapped().toString}")
}
val common = allConfig.getConfig("column.audit")
val commonList = common.root().keySet()
commonList.iterator().foreach( x => {
println("Value is :: " + x)
}
)`
this should work. but if your keyset is will print indifferent order than app.conf.
eg:
`> cat application.conf`
`column {
audit {
load_ts = "current_timestamp",
load_file_nm = "current_filename",
load_id = "load_id"
}`
above scrip will print as
Value is :: [load_id, load_ts, load_file_nm]
それを必要とするかもしれない誰にでも:
val sysProperties = System.getProperties
val allConfig = ConfigFactory.load("perks.conf")
val appConfig = allConfig.entrySet().filter { entry =>
!sysProperties.containsKey(entry.getKey)
}