【问题标题】:Groovy convert XML to JSON ArrayGroovy 将 XML 转换为 JSON 数组
【发布时间】:2021-12-19 04:04:23
【问题描述】:

这是我的 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()

【问题讨论】:

    标签: json xml groovy xml-to-json


    【解决方案1】:

    对于这么简单的格式,我只会选择你的属性 感兴趣并改造它。你的例子似乎没有显示任何 违规行为,这会让我做更多的防御性事情,比如检查 对于文本节点等。

    例如有一个功能来构建“代码+消息”映射。然后迭代 ExtendedStatus 节点和 collect 具有相同的功能:

    def codeAndMessage(node) {
        [code: node.Code.text(),
         message: node.Message.text()]
    }
    
    def build(node){
        codeAndMessage(node) +
        [extendedMessages: node.ExtendedStatus.collect{ codeAndMessage it }]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 2012-02-27
      • 2018-12-08
      • 2018-04-16
      相关资源
      最近更新 更多