如何在 groovy 中使用 JsonBuilder 创建数组
How to create an array with a JsonBuilder in groovy
我想用闭包的方式做如下json:
{
"root": [
{
"key": "testkey",
"value": "testvalue"
}
]
}
我正在使用以下语法:
new JsonBuilder().root {
'key'(testKey)
'value'(testValue)
}
但它产生:
{
"root": {
"key": "testkey",
"value": "testvalue"
}
}
您的示例工作正常,因为您为 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"
}
]
}
你可以这样写:
def json = new groovy.json.JsonBuilder()
json {
root (
[
{
key ('color')
value ('orange')
}
]
)
}
println json.toPrettyString()
注意上面数组是如何传递给root
的。
我想用闭包的方式做如下json:
{
"root": [
{
"key": "testkey",
"value": "testvalue"
}
]
}
我正在使用以下语法:
new JsonBuilder().root {
'key'(testKey)
'value'(testValue)
}
但它产生:
{
"root": {
"key": "testkey",
"value": "testvalue"
}
}
您的示例工作正常,因为您为 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"
}
]
}
你可以这样写:
def json = new groovy.json.JsonBuilder()
json {
root (
[
{
key ('color')
value ('orange')
}
]
)
}
println json.toPrettyString()
注意上面数组是如何传递给root
的。