我一直在尝试使用jsonBuilder创建一个对象映射几个小时但没有成功。我想要做的是创建这样的json,以便我可以像这样对待我的对象:someJsonObject.elements.2。期望的JSON看起来像这样(这是完全正确的语法):
{
"elements": {
"1": {
"id": 1,
"x": 111
},
"2": {
"id": 2,
"x": 222
},
"3": {
"id": 3,
"x": 333
}
}
}
到目前为止,我得到了最好的结果:
builder.elements() {
elementList.each { Element e ->
element( id : e.id, x : e.x )
println "dodano"
}
}
但我得到的只是我的json中打印的一个元素:
{
"elements": {
"element": {
"id": 3,
"x": 333
}
}
}
如果我只能动态命名我的对象,例如:
builder.elements() {
elementList.each { Element e ->
e.id( id : e.id, x : e.x )
println "dodano"
}
}
但它给了我一个错误:没有方法签名:com.webwaver.website.Element.id()适用于参数类型:(java.util.LinkedHashMap)值:[[id:3,x:748 ]
有没有人知道如何获得所需的json?
编辑: 谢谢你的回答。这有很大帮助,但由于我无法使用方法调用builder.elements(),我仍然遇到创建json的问题,看起来像这样:
{
"data": {
"lastPageNr": 1,
"lastLanguageId": 1,
"lastElementNr": 0,
"websiteId": "nrpntf"
},
"elements": {
"1": {
"id": 1,
"x": 111
},
"2": {
"id": 2,
"x": 222
},
"3": {
"id": 3,
"x": 333
}
}
}
任何想法?
答案 0 :(得分:1)
这为您提供了所需的输出:
import groovy.json.*
def builder = new JsonBuilder()
builder.elements {
"1" {
id 1
x 111
}
"2" {
id 2
x 222
}
"3" {
id 2
x 222
}
}
println builder.toPrettyString()
所以你想要的基于列表的构建器是这样的:
def elementList = [ [ id: 3, x:748 ], [ id: 4, x:222 ] ]
def builder = new JsonBuilder()
builder.elements {
elementList.each { e ->
"$e.id" {
id e.id
x e.x
}
}
}
println builder.toPrettyString()
def builder = new JsonBuilder()
builder {
data {
lastPageNr 1
lastLanguageId 1
lastElementNr 0
websiteId 'nrpntf'
}
elements {
elementList.each { e ->
"$e.id" {
id e.id
x e.x
}
}
}
}
println builder.toPrettyString()