如何在groovy中使用JsonBuilder创建数组

时间:2018-03-19 15:10:34

标签: arrays json groovy jsonbuilder

我想使用闭包方式来制作以下json:

{
    "root": [
        {
            "key": "testkey",
            "value": "testvalue"
        }
    ]
}

我使用以下语法:

new JsonBuilder().root {
        'key'(testKey)
        'value'(testValue)
}

但它产生了:

{
    "root": {
        "key": "testkey",
        "value": "testvalue"
    }
}

2 个答案:

答案 0 :(得分:3)

你可以写下面的内容:

def json = new groovy.json.JsonBuilder()
json  { 
  root (
   [
       {
        key ('color')
        value ('orange')
     }
   ]
  )
}

println json.toPrettyString()

注意如何将数组传递给上面的root

答案 1 :(得分:2)

您的示例正常工作,因为您传递了root密钥的简单映射。您必须传递一个列表,而不是产生预期的输出。请考虑以下示例:

import groovy.json.JsonBuilder

def builder = new JsonBuilder()
builder {
    root((1..3).collect { [key: "Key for ${it}", value: "Value for ${it}"] })
}

println builder.toPrettyString()

在此示例中,我们将使用(1..3).collect {}创建的元素列表传递给root节点。我们必须从构建JSON主体中拆分初始化,因为new JsonBuilder().root([])或甚至builder.root([])之类的东西会抛出异常,因为没有方法需要类型为List的参数。在闭包内定义节点root的列表可以解决这个问题。

输出

{
    "root": [
        {
            "key": "Key for 1",
            "value": "Value for 1"
        },
        {
            "key": "Key for 2",
            "value": "Value for 2"
        },
        {
            "key": "Key for 3",
            "value": "Value for 3"
        }
    ]
}