2016-09-14 10 views
-1

임의의 Groovy 맵 /리스트를 Groovy가 제공하는 구성 스타일 DSL 구문으로 변환하려면 어떻게해야합니까?임의의 Map (동적 객체)을 사용하여 DSL Groovy 설정 파일을 만드는 방법

예 :

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

:

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

UPDATE :

답변

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 
} 

을 감안할 때 귀하의 의견과 위의 폐쇄 정의, 다음 인쇄 문 :

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

는 그냥 ConfigObject으로 각지도를 변환 한 후 꽤 인쇄를 :

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의이 외부에서 작업을 수행 할 수 있습니다 알 수있는 사람을 원하고 처음에 내가 진짜하지 않았다 :

모든 신용에 간다 예쁘게 인쇄 된 방법 당신이 사전에 중첩 된지도 구조를 알고 있다면 내가