Groovy中的xml到json转换

时间:2016-12-10 08:30:11

标签: json groovy

我需要帮助在Groovy中将xml转换为json。我有的xml是这样的

 def xmlrecords = '''<root>
                        <node1>abc</node1>
                        <node2>def</node2>
                        <node3>hij</node3>
                        </root>'''

我知道这很简单,但我很难接受groovy。所以任何帮助都会非常感激。

感谢。

更新

我知道我可以做类似

的事情
def xml= new XmlParser().parseText( xmlrecords )
def json = new JsonBuilder()

json.records
{
   node1 "abc"
   node2 "def"
   node3 "hij"
}

println json.toPrettyString()

但我想要做的是像这样访问节点的数据

json.records
    {
       node1 xml.node1   //xml.node1=abc
       node2 xml.node2
       node3 xml.node3
    }

因为每个节点存储的数据对我来说都在变化。无论我上面写的任何代码都不起作用,我一直在打破这个问题。你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

你几乎走在正确的轨道上。您只需要在xml对象上应用 .text()函数。

见下文

static main(args) {

    def xmlrecords = '''<root>
                    <node1>abc</node1>
                    <node2>def</node2>
                    <node3>hij</node3>
                    </root>'''

    def xml= new XmlParser().parseText(xmlrecords)
    def json = new JsonBuilder()

    json.records
    {
       node1 xml.node1.text()  //xml.node1=abc
       node2 xml.node2.text()
       node3 xml.node3.text()
    }

    println json.toPrettyString()
}

<强>输出

{
"records": {
    "node1": "abc",
    "node2": "def",
    "node3": "hij"
    }
}

希望这有帮助!

答案 1 :(得分:0)

直接XML到JSON转换可以创建丑陋的深层嵌套JSON。您需要将XML转换为JSON中所需的简化结构。

def xmlrecords = '''<root>
                        <node1>abc</node1>
                        <node2>def</node2>
                        <node3>hij</node3>
                    </root>'''
def xml= new XmlParser().parseText( xmlrecords )

// programmatically transform XML into Map with node name and value
def map = new TreeMap()
xml.each {
 map.put(it.name(), it.text())
}

def json = JsonOutput.toJson(map)
println JsonOutput.prettyPrint(json)

JSON输出:

{
    "node1": "abc",
    "node2": "def",
    "node3": "hij"
}