這是我的 XML
<ErrorMessage>
<Code>BUSINESS_EXCEPTION</Code>
<Message>Invalid postcode - Invalid state</Message>
<ExtendedStatus>
<Code>48</Code>
<Message>Invalid Postcode</Message>
</ExtendedStatus>
<ExtendedStatus>
<Code>12</Code>
<Message>Invalid State</Message>
</ExtendedStatus>
</ErrorMessage>
嘗試將其轉換為以下 JSON
{
"code": "BUSINESS_EXCEPTION",
"message": "Invalid postcode - Invalid state",
"extendedMessages": [
{
"code": "48",
"message": "Invalid Postcode"
},
{
"code": "12",
"message": "Invalid State"
}
]
}
我正在嘗試使用以下代碼,但它沒有產生預期的結果:
def toJsonBuilder(xml){
def pojo = build(new XmlParser().parseText(xml))
new groovy.json.JsonBuilder(pojo)
}
def build(node){
if (node instanceof String){
return // ignore strings...
}
def map = ['name': node.name()]
if (!node.attributes().isEmpty()) {
map.put('attributes', node.attributes().collectEntries{it})
}
if (!node.children().isEmpty() && !(node.children().get(0) instanceof String)) {
map.put('extendedMessages', node.children().collect{build(it)}.findAll{it != null})
} else if (node.text() != ''){
map.put('message', node.text())
}
map
}
toJsonBuilder(xml1).toPrettyString()
uj5u.com熱心網友回復:
對于如此簡單的格式,我只會選擇您感興趣的屬性并對其進行轉換。您的示例似乎沒有顯示任何違規行為,這會讓我做更多的防御性作業,例如檢查文本節點等。
例如,有一個函式來構建“代碼 訊息”映射。然后迭代ExtendedStatus節點并使用相同的函式收集:
def codeAndMessage(node) {
[code: node.Code.text(),
message: node.Message.text()]
}
def build(node){
codeAndMessage(node)
[extendedMessages: node.ExtendedStatus.collect{ codeAndMessage it }]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/353698.html
