Как использовать groovy builder для создания массива типа json?
мы можем создать объект типа json с помощью JSON builder groovy:
def builder = new groovy.json.JsonBuilder()
def root = builder.people {
person {
firstName 'Guillame'
lastName 'Laforge'
// Named arguments are valid values for objects too
address(
city: 'Paris',
country: 'France',
zip: 12345,
)
married true
// a list of values
conferences 'JavaOne', 'Gr8conf'
}
}
def jsonStr = builder.toString()
мне нравится этот тип синтаксиса, но как построить массив типа json?
Э. Г.
[
{"code": "111", "value":"222"},
{"code": "222", "value":"444"}
]
Я нашел некоторые документы, которые говорят, что мы должны использовать JsonBuilder()
конструктора:
def mydata = [ ["code": "111", "value":"222"],["code": "222", "value":"444"] ]
def builder = new groovy.json.JsonBuilder(mydata)
def jsonStr = builder.toString()
но я предпочел первый синтаксис. Может ли он использовать его для генерации массива типа json?
3 ответов
синтаксис, который вы предлагаете, не выглядит возможным, поскольку я не считаю, что он действителен. Закрытие, такое как {"blah":"foo"}
не имеет смысла заводиться, и вы будете ограничены синтаксическими ограничениями. Я думаю, что лучшее, что вы сможете сделать, это что-то в следующем:
def root = builder.call (
[
{
code "111"
value "222"
},
{code "222"; value "444"}, //note these are statements within a closure, so ';' separates instead of ',', and no ':' used
[code: "333", value:"555"], //map also allowed
[1,5,7] //as are nested lists
]
)
также можно создать список блокирования, и передать его в конструктор
import groovy.json.*
dataList = [
[a:3, b:4],
[a:43, b:3, c:32]
]
builder = new JsonBuilder()
builder {
items dataList.collect {data ->
return {
my_new_key ''
data.each {key, value ->
"$key" value
}
}
}
}
println builder.toPrettyString()
Мне нравится преобразование в конце концов больше, чем builder,
def json = [
profile: [
_id: profile._id,
fullName: profile.fullName,
picture: profile.picture
]
,title: title
,details: details
,tags: ["tag1","tag2"]
,internalTags: ["test"]
,taggedProfiles: []
] as JSON