3
我想用Groovy的JsonBuilder來動態生成JSON。我想創建像JSON塊:Groovy JSONBuilder問題
{
"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 @(insert hex)'。
我的語法有什麼問題嗎?或者有人可以指點我使用超出簡單值的方法和/或示例的示例/教程(例如,數組中的嵌套值)。
注意:這是一個淡化的例子,但我試圖保持圍繞給我的問題領域的複雜性。
是啊,在'delegate'奏效了。但是,當我做builder.toString()我得到一個stackOverflowError(ReflectiveOperationException)。 – Devin
@Devin你在用什麼腳本?你從我的示例代碼中得到例外嗎? – dmahapatro
@Devin看看[這個問題](http://stackoverflow.com/questions/5538423/grails-jsonbuilder)如果你在談論嵌套對象。 – dmahapatro