我试图在Groovy中使用JsonBuilder来动态生成JSON。我想创建一个JSON块,如下所示:
{
"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]
}]
}我写过:
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();
}但我遇到了以下问题:
addUrn时,字符串中都不会返回任何内容。我是不是误解了如何在Groovy?中使用方法{时,都会在返回的值中得到一个‘_getEpisode_closure2_closure2@(插入十六进制)’。我的语法有什么问题吗?或者有人能告诉我一些示例/教程,它使用了方法和/或示例,而不是简单的值(例如数组中的嵌套值)。
注意:这是一个被淡化的例子,但我试图保持围绕给我带来问题的领域的复杂性。
发布于 2013-06-27 20:05:32
delegate方法中使用addUrn,而不是传递您正在处理的builder。toSting()或toPrettyString()上做的是root而不是builder。样本:
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()输出:-
{
"name": "Devin",
"data": {
"type": "Test",
"note": "Dummy"
},
"gender": {
"__type": "urn",
"value": "male"
},
"zip": {
"__type": "urn",
"value": "43230"
}
}https://stackoverflow.com/questions/17351125
复制相似问题