2017-05-10 1 views
0

내 항목 목록에서 간단한 JSON 배열을 만들려고합니다. JsonBuilder을 사용하여 훌륭한 샘플을 찾았습니다. 모양은 다음과 같습니다.Groovy JSON 배열 빌더 (닫는 부분에 사용자 정의 멤버 포함)

class Author { 
     String name 
} 
def authors = [new Author (name: "Guillaume"), 
      new Author (name: "Jochen"), 
      new Author (name: "Paul")] 

def json = new groovy.json.JsonBuilder() 
json authors, { Author author -> 
     name author.name 
} 

하지만 내 JSON에 사용자 지정 속성을 추가해야합니다. 다음과 같이 표시되어야합니다 :

json authors, { Author author -> 
     def c = author.name.bytes.encodeBase64() 
     name author.name 
     code c 
} 

그러나이 코드는 작동하지 않으므로 JSON 멤버와 클로저 멤버를 분리해야합니다. 솔직히, 나는 그루비에 대해 큰 전문가가 아니며 그 대답은 조금 단순 할 수 있다고 생각한다. 내가 폐쇄에이를 구현하려면,

def json = new groovy.json.JsonBuilder(authors) 

을하지만 :

또한, 나는 내 항목의 사용자 지정 목록을 작성하고 다음 방법으로이 목록을 변환 할 수 있습니다 것을 알고있다.

import groovy.json.JsonBuilder 

def json(items) { 
    def builder = new JsonBuilder() 

    builder(items.collect { item -> 
     [ 
      name: item.name, 
      code: "${item.name.bytes.encodeBase64()}" 
     ] 
    }) 
    builder.toString() 
} 

def authors = [ 
    [ name: "John Doe" ] 
] 


assert json(authors) == '[{"name":"John Doe","code":"Sm9obiBEb2U="}]' 

답변

1

당신이 제안하는 코드는, [[name:Guillaume, code:R3VpbGxhdW1l], [name:Jochen, code:Sm9jaGVu], [name:Paul, code:UGF1bA==]] 생산 그래서 당신의 코드가 잘입니다 :

0

당신은 G 스트링을 사용하여 base64로 문자열을 만들 수 있습니까? 환경이이 스크립트를 차단하고있는 것 같습니다.

+0

뱀파이어의 의견이 답입니다. 내 환경에서는 groovy.json.JsonBuilder 클래스를 사용할 수 없습니다. 내가 내 대본을 실행할 수없는 이유가 바로 그 때문이다. 나는 그루비를 아주 잘 알지 못한다. 그루비는 나에게 불명확 한 예외를 던지므로 문법 실수를 찾는다. – RredCat