[英]Want Groovy MarkupBuilder() Equivalent to JSONBuilder() for Objects
目標:鑒於下面的myInfoObject定義,我希望能夠這樣做:
println new groovy.xml.MarkupBuilder(myInfoObject).toPrettyString()
前提:
以下是Groovy最令人驚訝和方便的功能之一:用於復雜嵌套對象的明智動態序列化為合理的JSON。 只需傳遞對象,然后獲取JSON。
示例 - 地圖中的簡單地圖
import groovy.json.*
def myInfoMap = [
firstname : 'firstname',
lastname : 'lastname',
relatives : [
mother : "mom",
father : "dad"
]
]
myInfoJson = new JsonBuilder(myInfoMap)
//One line, straight to JSON object, no string writer/parser conversions
//Works on any object, extremely elegant, even handles deep nesting
//Alternatively, add .toPrettyString() for the string representation
返回:
{
"firstname": "firstname",
"lastname": "lastname",
"relatives": {
"mother": "mom",
"father": "dad"
}
}
我已經閱讀了所有可以找到的MarkupBuilder示例和文檔,並且似乎沒有任何XML等價物。 這是我能找到的最接近的,它幾乎不一樣。 http://www.leveluplunch.com/groovy/examples/build-xml-from-map-with-markupbuilder/
XML和JSON根本不同,但對象以類似的方式由XML表示仍然很常見。 XML等價物至少需要一個可選參數來指定數據的表示方式,但我認為合理的默認值是:
<myInfoMap>
<firstname>firstname</firstname>
<lastname>lastname</lastname>
<relatives>
<relative>
<mother>mom</mother>
</relative>
<relative>
<father>dad</father>
</relative>
</relatives>
</myInfoMap>
......必須手工建造,並且對結構有深入了解,如此......
def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
builder.myInfoMap {
myInfoMap.each{key, value ->
if (value instanceof Map){
"${key}"{
value.each{key2, value2 ->
"${key[0..key.size()-2]}"{
"${key2}" "${value2}"
}
}
}
}else{
"${key}" "${value}"
}
}
}
println writer.toString()
我甚至試圖變得聰明並使它有點動態,但你可以看到它與JSONBuilder的例子有多遠,即使是在一個簡單的例子中。
如果這是目前不可能的,而不是任何人的雷達,我將作為功能請求提交我的第一張JIRA票據到Groovy項目。 我想在做之前確定一下。 如果您認為這是下一步,請發表評論。
試試grails.converters.XML
。 在你的情況下:
def myInfoMap = [
firstname: 'firstname',
lastname : 'lastname',
relatives: [
mother: "mom",
father: "dad"
]
]
println new grails.converters.XML(myInfoMap)
會導致:
<?xml version="1.0" encoding="UTF-8"?>
<map>
<entry key="firstname">firstname</entry>
<entry key="lastname">lastname</entry>
<entry key="relatives">
<entry key="mother">mom</entry>
<entry key="father">dad</entry>
</entry>
</map>
對不起,我可能錯了,但XmlUtil.serialize我認為涵蓋了你想要的。
MrHaki:groovy-goodness-pretty-print-xml
我做了一段時間的工作,我將作為一個插件發布,我最終沒有發布它。 得到了側面跟蹤dns的飛行更新,但沒有結束工作。 無論如何處理xml控制器並遵循gsp視圖 。 但我認為Mr.Haki更優雅,並且有一些非常好的例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.