2016-09-14 4 views
-1

任意のGroovyマップ/リストをGroovyが提供する設定スタイルのDSL構文に変換するにはどうすればよいですか?任意のMap(動的オブジェクト)を使用してDSL Groovy設定ファイルを作成する方法

例:

test = 'lalala' 
nestedObject { 
    foo1 = 'foo1 val' 
    foo2 = 'foo2 val' 
    nested2 { 
     anInt = 5 
     anArray = ['a', 'b', 'c'] 
     anIntArray = [1, 2, 3] 
    } 
} 

UPDATE:

  • 再充当この投稿を明示的にダイナミック/一般的な解決策を求めるために

    def config = [ 
        'test': 'lalala', 
        'nestedObject': [ 
         foo1: 'foo1 val', 
         foo2: 'foo2 val', 
         nested2: [ 
          anInt: 5, 
          anArray: ['a', 'b', 'c'], 
          anIntArray: [1, 2, 3] 
         ] 
        ] 
    ] 
    

    のようなものに。

  • これは、それ独自の質問とその初期化状態で知られているマップを前提とし、次のとは異なります:ちょうどConfigObjectに各マップに変換し、それをかなり-印刷How to create ConfigObject using only nested maps in Grails?

答えて

1

@Steinar

おかげJsonOutput.prettyPrintで混乱していました。

import groovy.util.ConfigObject 

def mapToConfig 
mapToConfig = { Map map -> 
    map.collectEntries { k, v -> 
     v instanceof Map ? [(k):mapToConfig(v)] : [(k):v] 
    } as ConfigObject 
} 

を考えると、あなたの入力し、上記閉鎖の定義は、以下のprint文:

println mapToConfig(config).prettyPrint() 

は、この出力が得られますが、未知の任意のネストされたマップの構造上、これを行うために必要がある場合は、このような何かを試してみてください:

test='lalala' 
nestedObject { 
    foo1='foo1 val' 
    foo2='foo2 val' 
    nested2 { 
     anInt=5 
     anArray=['a', 'b', 'c'] 
     anIntArray=[1, 2, 3] 
    } 
} 
+0

ワウ!私は明示的に動的な解決策を求めるために投稿を再利用しました。クール!! –

0

を:

import groovy.util.ConfigObject 

def config = [ 
    'test': 'lalala', 
    'nestedObject': [ 
     foo1: 'foo1 val', 
     foo2: 'foo2 val', 
     nested2: [ 
      anInt: 5, 
      anArray: ['a', 'b', 'c'], 
      anIntArray: [1, 2, 3] 
     ] as ConfigObject 
    ] as ConfigObject 
] as ConfigObject 

println config.prettyPrint() 

すべてのクレジットは、に行く:How to create ConfigObject using only nested maps in Grails?

(私はちょうどあなたがGrailsのこの外側を行うことができます知っている人を望んでいたし、最初は私が本当ませんでしたきれいな印刷がどのように呼び出されたかを確認してください。私は))(事前にネストされたマップの構造を知っている場合は、あなたのソリューションが動作する

関連する問題