JSON с массивом и не массив данных с Groovy JsonBuilder
Мне нужно создать строку JSON в моем скрипте Groovy, который имеет некоторые элементы, которые являются массивом, а некоторые нет. Например ниже
{
"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
1 ответ
Решение
В Groovy, {}
синтаксис используется для замыканий. Для объектов в 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"]}]}}'