首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsonbuilder:如何创建对象映射

jsonbuilder:如何创建对象映射
EN

Stack Overflow用户
提问于 2013-02-22 19:19:32
回答 1查看 3.5K关注 0票数 0

几个小时以来,我一直在尝试用jsonBuilder创建对象的映射,但都没有成功。我想要做的是创建这样的json,这样我就可以像这样访问我的对象: can JsonObject.elements.2。所需的JSON如下所示(它的语法完全正确):

代码语言:javascript
复制
{
    "elements": {
        "1": {
            "id": 1,
            "x": 111
        },
        "2": {
            "id": 2,
            "x": 222
        },
        "3": {
            "id": 3,
            "x": 333
        }
    }
}

到目前为止,我用这段代码得到了最好的结果:

代码语言:javascript
复制
builder.elements() {
    elementList.each { Element e ->
        element( id : e.id, x : e.x )
        println "dodano"
    }
}

但我得到的只是一个打印在我的json中的元素:

代码语言:javascript
复制
{
    "elements": {
        "element": {
            "id": 3,
            "x": 333
        }
    }
}

如果我能动态地命名我的对象,比如这样:

代码语言:javascript
复制
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时仍然有一个问题,它看起来像这样:

代码语言:javascript
复制
{
    "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
        }
    }
}

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 19:41:39

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

代码语言:javascript
复制
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()

所以你想要的基于列表的构建器是这样的:

代码语言:javascript
复制
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()

编辑--更改问题后:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15022995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档