Groovy 将 XML 转换为 JSON 数组
Groovy convert XML to JSON Array
这是我的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()
这么简单的格式,我只挑你的属性
感兴趣并对其进行改造。你的例子似乎没有显示任何
违规行为,这会让我做更多防御性的事情,比如检查
用于文本节点等
例如有一个功能可以构建“代码+消息”地图。然后迭代
ExtendedStatus
个节点并使用相同的函数收集:
def codeAndMessage(node) {
[code: node.Code.text(),
message: node.Message.text()]
}
def build(node){
codeAndMessage(node) +
[extendedMessages: node.ExtendedStatus.collect{ codeAndMessage it }]
}
这是我的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()
这么简单的格式,我只挑你的属性 感兴趣并对其进行改造。你的例子似乎没有显示任何 违规行为,这会让我做更多防御性的事情,比如检查 用于文本节点等
例如有一个功能可以构建“代码+消息”地图。然后迭代
ExtendedStatus
个节点并使用相同的函数收集:
def codeAndMessage(node) {
[code: node.Code.text(),
message: node.Message.text()]
}
def build(node){
codeAndMessage(node) +
[extendedMessages: node.ExtendedStatus.collect{ codeAndMessage it }]
}