jsonbuilder:如何创建对象的映射

jsonbuilder:如何创建对象的映射,json,groovy,jsonbuilder,Json,Groovy,Jsonbuilder,我尝试用jsonBuilder创建对象的映射已经有几个小时了,但没有成功。我想做的是创建这样的json,这样我就可以像这样处理我的对象:someJsonObject.elements.2。所需的JSON如下所示(语法完全正确): 到目前为止,我通过以下代码获得了最佳结果: builder.elements() { elementList.each { Element e -> element( id : e.id, x : e.x ) println

我尝试用jsonBuilder创建对象的映射已经有几个小时了,但没有成功。我想做的是创建这样的json,这样我就可以像这样处理我的对象:someJsonObject.elements.2。所需的JSON如下所示(语法完全正确):

到目前为止,我通过以下代码获得了最佳结果:

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"
        }
    }
{
    "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
        }
    }
}
但它给了我一个错误:没有方法com.webwaver.website.Element.id()的签名适用于参数类型:(java.util.LinkedHashMap)值:[[id:3,x:748]]

有人知道如何获得想要的json吗

编辑: 谢谢你的回答。这很有帮助,但由于我不能使用方法调用builder.elements(),因此我在创建json时仍然遇到问题,如下所示:

builder.elements() {
        elementList.each { Element e ->
            e.id( id : e.id, x : e.x )
            println "dodano"
        }
    }
{
    "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
        }
    }
}

有什么想法吗?

这将为您提供所需的输出:

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()
编辑--更改问题后:
更新了我的答案,为这个不同的问题添加了一个解决方案。我尝试了一些非常类似的方法,但每次我使用每个闭包时,都会出现一个错误。我不知道我做错了什么。无论如何,非常感谢。