Arrays Groovy简单JSON数组生成器
我需要在JSON中构建一个简单的JSON数组,但在循环中,它会在每次迭代中覆盖第一个值Arrays Groovy简单JSON数组生成器,arrays,groovy,jsonbuilder,Arrays,Groovy,Jsonbuilder,我需要在JSON中构建一个简单的JSON数组,但在循环中,它会在每次迭代中覆盖第一个值 def jsonBuilder = new groovy.json.JsonBuilder() contact.each { jsonBuilder.contact( FirstName: it.getFirstName(), LastName: it.getLastName(),
def jsonBuilder = new groovy.json.JsonBuilder()
contact.each {
jsonBuilder.contact(
FirstName: it.getFirstName(),
LastName: it.getLastName(),
Title: it.getTitle(),
)
}
它只返回简单的JSON并覆盖每个迭代的值,只保留最后一个迭代。在groovy中构造JSON数组的语法是什么?诀窍是从联系人列表中收集。假设合同列表的结构如下所示,请遵循下面使用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()
]
]
}
)
使用JsonBuilder不能很好地与.each一起工作;我用过收集这种东西。下面是一个适用于您的案例的示例:
static class Contact {
String firstName
String lastName
String title
}
Contact c1 = new Contact(firstName: "Tom", "lastName": "Potter", title: "Mr")
Contact c2 = new Contact(firstName: "Ryan", "lastName": "Olson", title: "Mr")
List<Contact> contactList = [c1,c2]
def jsonBuilder = new groovy.json.JsonBuilder()
jsonBuilder {
contacts(contacts.collect{[firstName: it.firstName, lastName: it.lastName, title: it.title]})
}
println jsonBuilder.toPrettyString()
No直接回答了关于JsonBuilder的问题,但如果目标是获得JSON输出字符串,则可以通过以下方式完成,部分代码借用@dmahapatro answer,使用:
谢谢你,朋友,但现在我使用的是import net.sf.json.JSONObject import net.sf.json.JSONArray JSONObject obj=new JSONObject;JSONArray列表=新JSONArray;这就解决了问题。。
{
"contacts": [
{
"firstName": "Tom"
},
{
"firstName": "Ryan"
}
]
}
import groovy.json.JsonOutput
def contacts = [
[ getFirstName : { 'A' }, getLastName : { 'B' }, getTitle : { 'C' } ],
[ getFirstName : { 'D' }, getLastName : { 'E' }, getTitle : { 'F' } ],
[ getFirstName : { 'G' }, getLastName : { 'H' }, getTitle : { 'I' } ]
]
def list = ['contacts': contacts.collect { [FirstName: it.getFirstName(), LastName: it.getLastName(), Title: it.getTitle()] } ]
print JsonOutput.prettyPrint(JsonOutput.toJson(list))