(これは、ここで尋ねられた質問に対するフォローアップの質問です)
Groovy の JsonBuilder を使用して、次の 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()
builder {
addUrn(delegate, "type", myCustomVal1)
addUrn(delegate, "urn", "some:urn:$myCustomVal2")
"date" {
epoch 1265662800000
str "2010-02-08T21:00:00Z"
}
"metadata" ({
ratings ({
rating "G"
scheme "eirin"
addUrn(delegate, "_type", "$myCustomVal3")
})
creators "Jim", "Bob", "Joe"
})
}
return root.toString();
}
コードは、 (ネストされた要素の下で)への3 回目の呼び出しのStackOverflowError
ためにスローします。その行をコメントアウトすると、完全に機能します (必要な情報のチャンクが欠落しているという事実を除いて)。addUrn
ratings
- なぜこうなった?
- デリゲートを直接の親に設定するにはどうすればよい
ratings
ですか?
metaClass を使用してみましたが、役に立ちませんでした。