2016-10-07 8 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]"} 
     } 
    } 

を試みたが、それは例外を与える... Groovyで

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