1

我需要在我的 Groovy 脚本中创建一个 JSON 字符串,其中有一些元素是数组,而一些元素不是。比如下面的..

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

我找到了这篇文章,但答案要么没有意义,要么不适用于我的示例。

我在代码中尝试了以下...

 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
4

1 回答 1

2

在 Groovy 中,{}语法用于闭包。对于 JSON 中的对象,您希望使用 map 语法[:],对于列表,则使用列表语法[]

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]"}]}}'

更新:根据您的后续操作,您需要在and字符串[]之外使用相同的列表语法:"[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"]}]}}'
于 2016-10-07T14:26:21.187 回答