2013-07-11 6 views
14

मैं 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() की कोशिश की, लेकिन ऐसा लगता है कि यह सिस्टम, अक्का और कई अन्य गुणों सहित सभी गुणों को लौटाता है।

+0

आप [entrySet] की कोशिश की (http://typesafehub.github.io/config/latest/api/com/typesafe/config/Config.html#entrySet ())? – vidit

उत्तर

17
उदाहरण के लिए यदि आप अपने

Settings.scala

val conf = ConfigFactory.load("perks.conf") 

अगर आप रूट config (नहीं conf.root(), लेकिन इस config की जड़ वस्तु) पर entrySet फोन यह होगा रिटर्न में निम्न कोड कई कचरा, तुम क्या जरूरत है ऐसा करने के लिए perks.conf में कुछ पथ के तहत अपने सभी भत्ते जगह है:

perks { 
    autoshield { 
    name="autoshield" 
    price=2 
    description="autoshield description" 
    } 
    immunity { 
    name="immunity" 
    price=2 
    description="autoshield description" 
    } 
} 

और फिर Settings.scala फ़ाइल में इस config मिलती है:

val conf = ConfigFactory.load("perks.conf").getConfig("perks") 

और उसके बाद एंट्री कॉल को इस कॉन्फ़िगरेशन पर कॉल करें और आपको मूल ऑब्जेक्ट से नहीं, बल्कि भत्ते से सभी प्रविष्टियां मिलेंगी। भूल जाते हैं कि typesafe कॉन्फ़िग जावा में लिखा है और entrySet java.util.Set देता है, तो आप आयात करना scala.collection.JavaConversions._

+0

+1 मुझे '.getConfig()' दिखाने के लिए +1 - बहुत उपयोगी – akauppi

25

entrySet पेड़ गिर जरूरत नहीं है। आप केवल तत्काल बच्चों पर पुनरावृति करना चाहते हैं, का उपयोग करें:

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

k "AutoShield" और "प्रतिरक्षा", लेकिन "autoshield.name", "autoshield.price" आदि

यह हो जाएगा आवश्यक है कि आप scala.collection.JavaConversions._ आयात करें।

+0

यह स्वीकार्य उत्तर होना चाहिए। 'JavaConversions' एक सुपर सहायक टुकड़ा है। – sph21

+0

ऐसी कोई विधि नहीं :-( – user123

0

वाले किसी भी व्यक्ति की आवश्यकता हो सकती करने के लिए:

val sysProperties = System.getProperties 
val allConfig = ConfigFactory.load("perks.conf") 
val appConfig = allConfig.entrySet().filter { entry => 
    !sysProperties.containsKey(entry.getKey) 
} 
0

getObject मुझे एक योग्य json वस्तु दिया है (उदा timeout.ms = 5{ timeout: { ms: 5 } हो जाता है)।

मैं के साथ समाप्त हो गया:

conf.getConfig(baseKey).entrySet().foreach { entry => 
    println(s"${entry.getKey} = ${entry.getValue.unwrapped().toString}") 
} 
संबंधित मुद्दे