Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Groovy简单JSON数组生成器_Arrays_Groovy_Jsonbuilder - Fatal编程技术网

Arrays Groovy简单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(),

我需要在JSON中构建一个简单的JSON数组,但在循环中,它会在每次迭代中覆盖第一个值

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))