2016-10-18 7 views
1

yamlファイル全体をMap yamlConfigに保存しました。これを印刷して確認できます。groovyのymlファイルから値を取得できません

出力を、私は、コードを実行します。yamlConfig.each{ k, v -> println "${k}:${v}" }は次のとおりです。

Host:localhost 
Port:10000 
application:[name:ABC, preferences:[UUID:d3f3278e, server:localhost:2222]] 
services:[[name:XYZ, instances:1, start:true]] 
dataSets:[[name:ABC], [name:XYZ]] 

さて、私は次のコードを使用して地図から値を取得しようとしています。しかし

println yamlConfig.get("services").getAt("name") 

を、私は取得しています値:[XYZ]。代わりに、角括弧なしでXYZという結果が必要です。私が使用しています

YMLファイルは:

Host: localhost 
Port: 10000 
application: 
    name: ABC 
    preferences: 
    UUID: d3f3278e 
    server: localhost:2222 
services: 
    - name: XYZ 
    instances: 1 
    start: true 
data: 
    - name: ABC 
    - name: XYZ 
+0

yamlConfig.get("services").getAt('name') 

は実際にあなたがこのような何かをする必要がある特定のサービスの名前を取得するために、そう

yaml['services'].collect { it['name'] } 

を行いますコード貼り付け? 'println yamlConfig'が出力するものを表示できますか? – sensei

+0

先生、yamlConfigの印刷に使用したコードで質問を更新しました。 'println yamlConfig'の出力もそこにあります。 – Praveen

答えて

3

これは、あなたのnameプロパティの前に置かれ-文字です。 yamlパーサは、配列としてservicesセクションの内部を処理します。

nameプロパティの実行時には、yamlConfig['services']['name']が実行されます。groovyは、サービス配列内の配列項目のすべてのmacthingプロパティを提供し、別の配列でのみ返すことができます。

-を削除するか、yamlConfig['services'][0]['name']を使用してください。あなたがサービスの返されたリストにGetAt機能を適用すると

1
yamlConfig.get("services") 

リターンリストではなく、サービスは、そのためには、名前のリストを返します。あなたが最初にマップを印刷ましたか

println yaml['services'][0]['name'] 
+0

アレックスに感謝します。出来た。 – Praveen

関連する問題