19

私は 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.root()ましたが、システム、akka、およびその他の多くのプロパティを含むすべてのプロパティを返すようです。

4

5 に答える 5

40

entrySet木を倒します。直接の子のみを反復処理する場合は、次を使用します。

conf.getObject("perks").asScala.foreach({ case (k, v) => ... })

k「autoshield」と「immunity」になりますが、「autoshield.name」、「autoshield.price」などは含まれません。

これには、インポートする必要がありますscala.collection.JavaConverters._

于 2014-02-26T14:09:47.660 に答える
1

getObjectは修飾された json オブジェクトを与えてくれました (例: become timeout.ms = 5) { timeout: { ms: 5 }

私は結局:

conf.getConfig(baseKey).entrySet().foreach { entry =>
   println(s"${entry.getKey} = ${entry.getValue.unwrapped().toString}")
}
于 2016-12-07T08:51:24.413 に答える
0

必要な方へ:

val sysProperties = System.getProperties
val allConfig = ConfigFactory.load("perks.conf")
val appConfig = allConfig.entrySet().filter { entry =>
  !sysProperties.containsKey(entry.getKey)
}
于 2016-02-02T01:57:29.897 に答える