arrays - Groovy 简单 JSON 数组生成器

标签 arrays groovy jsonbuilder

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

def jsonBuilder = new groovy.json.JsonBuilder()
contact.each {
            jsonBuilder.contact(
                    FirstName:  it.getFirstName(),
                    LastName:  it.getLastName(),
                    Title: it.getTitle(),       
            )
    }

它仅返回简单的 JSON 并覆盖每次迭代的值并仅保留最后一次迭代的值。在 groovy 中构造 JSON 数组的语法是什么?

最佳答案

技巧是从联系人列表中收集。假设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() 
            ] 
        ]
    }
)

关于arrays - Groovy 简单 JSON 数组生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28206255/

相关文章:

javascript - 在 Ruby 中获取数组的第 n 个元素?

javascript - 当对象属性不存在时返回值

grails - 为什么我无法使用 grails 框架 1.3.7 中安装的 spring security 和 weceem 插件登录

grails - 如何使创建的JSON对象成为Groovy对象,以便我通过dot(.)运算符访问属性

C数组压入,为什么减去 '0'?

c - 使用字符串和数组

groovy - 如何从soapui groovy脚本执行shell脚本?

grails - 如何在Grails Gorm中查询3个表

json - 在 Groovy 中使用 JSONBuilder 排除空值

json - 使用 Groovy JsonBuilder 时如何保留时区?