首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy JSONBuilder问题

Groovy JSONBuilder问题
EN

Stack Overflow用户
提问于 2013-06-27 18:57:14
回答 1查看 4.3K关注 0票数 3

我试图在Groovy中使用JsonBuilder来动态生成JSON。我想创建一个JSON块,如下所示:

代码语言:javascript
复制
{
    "type": {
        "__type": "urn",
        "value": "myCustomValue1"
    },
    "urn": {
        "__type": "urn",
        "value": "myCustomValue2"
    },
    "date": {
        "epoch": 1265662800000,
        "str": "2010-02-08T21:00:00Z"
    },
    "metadata": [{
        "ratings": [{
            "rating": "NR",
            "scheme": "eirin",
            "_type": {
                "__type": "urn",
                "value": "myCustomValue3"
            }
        }],
        "creators": [Jim, Bob, Joe]
    }]
}

我写过:

代码语言:javascript
复制
def addUrn(parent, type, urnVal) {
    parent."$type" {
        __type "urn"
        "value" urnVal
    }
}

String getEpisode(String myCustomVal1, String myCustomVal2, String myCustomVal3) {
    def builder = new groovy.json.JsonBuilder()
    def root = builder {
        addUrn(builder, "type", myCustomVal1)
        addUrn(builder, "urn", "some:urn:$myCustomVal2")
        "date" {
            epoch 1265662800000
            str "2010-02-08T21:00:00Z"
        }
       "metadata" ({
                ratings ({
                        rating "G"
                        scheme "eirin"
                        addUrn(builder, "_type", "$myCustomVal3")
                })
                creators "Jim", "Bob", "Joe"                    
        })
    }

    return root.toString();
}

但我遇到了以下问题:

  1. 每当我调用addUrn时,字符串中都不会返回任何内容。我是不是误解了如何在Groovy?中使用方法
  2. 没有一个值封装在返回的字符串中的双引号(或单引号)中。
  3. 每当我使用{时,都会在返回的值中得到一个‘_getEpisode_closure2_closure2@(插入十六进制)’。

我的语法有什么问题吗?或者有人能告诉我一些示例/教程,它使用了方法和/或示例,而不是简单的值(例如数组中的嵌套值)。

注意:这是一个被淡化的例子,但我试图保持围绕给我带来问题的领域的复杂性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 20:05:32

  1. 您必须在delegate方法中使用addUrn,而不是传递您正在处理的builder
  2. 这是因为您在toSting()toPrettyString()上做的是root而不是builder
  3. 如果第二步被执行就解决了。

样本:

代码语言:javascript
复制
def builder = new groovy.json.JsonBuilder()
def root = builder {
              name "Devin"
              data {
                 type "Test"
                 note "Dummy"
              }
              addUrn(delegate, "gender", "male")
              addUrn(delegate, "zip", "43230")
           }


def addUrn(parent, type, urnVal) {
    parent."$type" {
        __type "urn"
        "value" urnVal
    }
}

println builder.toPrettyString()

输出:-

代码语言:javascript
复制
{
    "name": "Devin",
    "data": {
        "type": "Test",
        "note": "Dummy"
    },
    "gender": {
        "__type": "urn",
        "value": "male"
    },
    "zip": {
        "__type": "urn",
        "value": "43230"
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17351125

复制
相关文章

相似问题

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