2016-12-10 2 views
0

Мне нужна помощь в преобразовании xml в json в Groovy. XML У меня есть что-то вроде этогоxml to json conversion в Groovy

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

Я знаю, что это довольно просто, но я изо всех сил, чтобы справиться с заводной. Поэтому любая помощь была бы очень оценена.

Спасибо.

UPDATE

Я знаю, что я могу сделать что-то вроде

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 
    } 

после данные, которые хранятся у каждого узла, меняются. Какой бы код, который я написал выше, не работает, и я ломаю голову над этим. Так не могли бы вы помочь мне?

+0

Вы пробовали что-нибудь? Подсказка: XmlSlurper и JsonBuilder –

+0

@tim_yates Я отредактировал и объяснил, что именно я имею в виду. –

ответ

2

Вы довольно много на правильном пути. Вам просто нужно было применить функцию .text() к вашему объекту xml.

Ниже

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" 
    } 
} 

Надежда это помогает!

+0

Спасибо, это действительно помогло. –

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" 
} 
+0

Спасибо, это работает. BTW мог бы рекомендовать любые онлайн-уроки или веб-сайты, где я мог бы узнать больше о groovy? –

+0

Есть несколько полезных советов; ознакомьтесь с этим [учебником] (http://www.tutorialspoint.com/groovy/) и [здесь] (https://leanpub.com/groovytutorial/read) – JasonM1