2016-09-15 1 views
1

Les exemples dans typesafe config vous devez savoir un chemin pour spécifier littéralement, .: par exempleComment puis-je récupérer des valeurs imbriquées à partir de typesafe config avec Java?

config1.getString("complex-app.something") 

Je dois être capable d'analyser un fichier de configuration avec des étiquettes de forme libre dans les lieux. Comment puis-je gérer cela.

dire que j'ai HOCON comme:

root : { 
    a : { x: 1, y: 2 }, 
    b : { x: 2, z: 3 } 
} 

Sans savoir ce que les clés sont dans le fichier, comment puis-je savoir qu'il ya a 'clés et « b » et que la valeur de l'objet avec la touche 'a' a les touches 'x' et 'y' et pour 'b' il y a les touches 'x' et 'z'?

Voici une façon de ne pas le faire:

Config config = ConfigFactory.load("configula"); 
Config root = config.getObject("root").toConfig(); 
for (Entry<String, ConfigValue> e: root.entrySet()) { 
    // The key is a.x, a.y etc. ??!? 
    // The value is not a map-like thing 
} 

Avec les clés du jeu d'entrée étant un chemin, je dois analyser le chemin pour trouver ce que les clés étaient, ce qui est assez proche de faire il est plus facile d'analyser simplement un fichier texte avec StringTokenizer ou similaire.

Quelle est la méthode de config utilisée pour analyser les objets imbriqués? Par exemple, avec groovy et ConfigSlurper une structure similaire:

root { 
    a { 
    x = 1 
    y = 2 
    } 
    b { 
    x = 2 
    z = 3 
    } 
} 

serait analysé comme ceci:

cfg = new ConfigSlurper().parse(new File('configula.config')) 
cfg.root.each { k, r -> 
    r.each { kk, v -> 
    println "${k}, ${kk} -> ${v}" 
    } 
} 

toutes les combinaisons de choses que j'ai essayé finit la valeur étant un ConfigValue. Existe-t-il un moyen d'obtenir un arbre de clés qui correspondent à des objets qui contiennent eux-mêmes des clés qui correspondent à des objets?

Répondre

0

Pour répondre à ma propre question: ConfigObject étend java.util.Map donc, un moyen de naviguer quand une clé peut être une valeur arbitraire, est d'utiliser ConfigObject.keySet().