2016-10-07 2 views
1

일부 Groovy 스크립트에는 배열이고 일부는 그렇지 않은 JSON 문자열을 만들어야합니다. 예를 들어, 아래 .. 배열 및 배열이 아닌 JSON with Groovy JsonBuilder

{ 
"fleet": { 
    "admiral":"Preston", 
    "cruisers": [ 
     {"shipName":"Enterprise"}, 
     {"shipName":"Reliant"} 
    ] 
    } 
} 

나는 this post하지만 해답을 발견하거나 이해가되지 않았거나 내 예를 적용하지 않았다.

제가

def json = new groovy.json.JsonBuilder() 
def fleetStr = json.fleet { 
     "admiral" "Preston" 
     cruisers { 
      {shipName: "[Enterprise]"}, {shipName: "[Reliant]"} 
     } 
    } 

하지만 예외를 제공 ... 그루비

Ambiguous expression could be either a parameterless closure expression or an isolated open code block 

답변

2

... 코드 아래의 노력은 {} 구 마개에 사용된다. JSON에서 개체를 들어,지도 구문 [:]를 사용하려면, 및 목록에 대한 목록 구문 [] :

def json = new groovy.json.JsonBuilder() 
def fleetStr = json.fleet { 
    "admiral" "Preston" 
    cruisers([ 
     [shipName : "[Enterprise]"], 
     [shipName: "[Reliant]"] 
    ]) 
} 

assert json.toString() == 
    '{"fleet":{"admiral":"Preston","cruisers":[{"shipName":"[Enterprise]"},{"shipName":"[Reliant]"}]}}' 

업데이트 : 당신의 후속에 따라, 동일한를 사용해야합니다 "[Enterprise]""[Reliant]" 문자열 외부 목록 구문 [] :

def json = new groovy.json.JsonBuilder() 
def fleetStr = json.fleet { 
    "admiral" "Preston" 
    cruisers([ 
     [shipName : ["Enterprise"]], 
     [shipName: ["Reliant"]] 
    ]) 
} 

assert json.toString() == 
    '{"fleet":{"admiral":"Preston","cruisers":[{"shipName":["Enterprise"]},{"shipName":["Reliant"]}]}}' 
+0

덕분에, 단지 후속 질문 (다소 무관). shipName의 값이 JSON의 배열 요소로 나타나기를 원한다고 가정하면 값만 가질 수 있습니다. 예를 들어 "shipName": [ "Enterprise"], 내가이 작업을 수행하는 방법을 도울 수 있습니까? – AbuMariam