微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Groovy输出JSON

我一直在尝试使用groovy Jsonbuilder,你可以在下面看到尝试查看构建 JSON对象和数组的不同方法.在事情开始变得有意义之后,我尝试扩展到下面显示内容.我的问题是,为什么“内容”出现在json漂亮的字符串输出中?我实际上有另一个json对象在json字符串输出显示this.class信息.

有任何想法吗?我是新手,所以它肯定是一个明显的.

def tt = ["test","test1"]
                def jjj = "jason"
                def js3 = new groovy.json.JsonBuilder()
                def js2 = new groovy.json.JsonBuilder(tt);
                js3 hello: "$jjj","$jjj": tt
                def js4 = new groovy.json.JsonBuilder()
                def result = js4([sdn: js3,openflow: js2,type: 3])
                println js4.toPrettyString();


{
"sdn": {
    "content": {
        "hello": "jason","jason": [
            "test","test1"
        ]
    }
},"openflow": {
    "content": [
        "test","test1"
    ]
},"type": 3

}

解决方法

这个问题可以重述为……

为什么这样:

import groovy.json.*

def js3 = new JsonBuilder(["test","test1"])
def js4 = new JsonBuilder(js3)
println js4.toString()

打印:

{"content":["test","test1"]}

还有这个:

import groovy.json.*

def js3 = new JsonBuilder(["test","test1"])
def js4 = new JsonBuilder(js3.content)
println js4.toString()

打印这个(?):

["test","test1"]

简短的回答是JsonBuilder有一个名为content的成员,它代表了有效负载.当一个JsonBuilder吸收另一个时,我们想要替换有效负载,而不是嵌套它.这行是替换有效载荷的方法

def js4 = new JsonBuilder(js3.content)

最终,这源于JsonBuilder.toString()(code here)调用JsonOutput.toJson(object)(code here)的事实.

读者的练习是试验:

class MyBuilder {
    def content
}

def myB = new MyBuilder(content: ["test","test1"])
println JsonOutput.toJson(myB)
println JsonOutput.toJson(myB.content)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐