作者:。 | 来源:互联网 | 2023-05-24 15:02
我需要在JSON中构建一个简单的JSON数组,但在循环中它会在每次迭代期间覆盖第一个值.
def jsOnBuilder= new groovy.json.JsonBuilder()
contact.each {
jsonBuilder.contact(
FirstName: it.getFirstName(),
LastName: it.getLastName(),
Title: it.getTitle(),
)
}
它只返回简单的JSON并覆盖每次迭代的值并保留最后一次.在groovy中构造JSON数组的语法是什么?
1> dmahapatro..:
诀窍是collect
从联系人列表中.假设contract
列表的结构如下,请按照下面的方式jsonBuilder
使用.
def cOntact= [
[ getFirstName : { 'A' }, getLastName : { 'B' }, getTitle : { 'C' } ],
[ getFirstName : { 'D' }, getLastName : { 'E' }, getTitle : { 'F' } ],
[ getFirstName : { 'G' }, getLastName : { 'H' }, getTitle : { 'I' } ]
]
def jsOnBuilder= new groovy.json.JsonBuilder()
jsonBuilder {
contacts contact.collect {
[
FirstName: it.getFirstName(),
LastName: it.getLastName(),
Title: it.getTitle()
]
}
}
println jsonBuilder.toPrettyString()
// Prints
{
"contacts": [
{
"FirstName": "A",
"LastName": "B",
"Title": "C"
},
{
"FirstName": "D",
"LastName": "E",
"Title": "F"
},
{
"FirstName": "G",
"LastName": "H",
"Title": "I"
}
]
}
如果您正在寻找JSONArray而不是JSONObject作为最终结构,那么使用:
jsonBuilder(
contact.collect {
[
FirstName: it.getFirstName(),
LastName: it.getLastName(),
Title: it.getTitle()
]
}
)
// OP
[
{
"FirstName": "A",
"LastName": "B",
"Title": "C"
},
{
"FirstName": "D",
"LastName": "E",
"Title": "F"
},
{
"FirstName": "G",
"LastName": "H",
"Title": "I"
}
]
它没有意义,但如果结构需要如下所示
[
{
"contact": {
"FirstName": "A",
"LastName": "B",
"Title": "C"
}
},
{
"contact": {
"FirstName": "D",
"LastName": "E",
"Title": "F"
}
},
{
"contact": {
"FirstName": "G",
"LastName": "H",
"Title": "I"
}
}
]
然后用
jsonBuilder(
contact.collect {
[
contact : [
FirstName: it.getFirstName(),
LastName: it.getLastName(),
Title: it.getTitle()
]
]
}
)