Как использовать Groovy Builder для создания массива JSON?
Мы можем сгенерировать объектный тип json с помощью конструктора json от 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()
Мне больше нравится преобразование, чем строитель,
def json = [
profile: [
_id: profile._id,
fullName: profile.fullName,
picture: profile.picture
]
,title: title
,details: details
,tags: ["tag1","tag2"]
,internalTags: ["test"]
,taggedProfiles: []
] as JSON