Groovy中的json和xml操作

网友投稿 697 2022-05-30

JSON操作

json ->object

final String myJson =''' {"code":200,"body":{"search_result":[{"id":"1393","name":"东京食尸鬼漫画","cover_url":"http://img.1whour.com/xpic/东京食尸鬼.jpg","other_1":"","other_2":""},{"id":"2402","name":"东京都立咒术学校漫画","cover_url":"http://img.1whour.com/xpic/东京都立咒术学校.jpg","other_1":"","other_2":""},{"id":"1107","name":"大东京玩具箱漫画","cover_url":"http://img.1whour.com/xpic/大东京玩具箱.jpg","other_1":"","other_2":""},{"id":"2026","name":"东京小红帽漫画","cover_url":"http://img.1whour.com/xpic/东京小红帽.jpg","other_1":"","other_2":""},{"id":"879","name":"东京ESP漫画","cover_url":"http://img.1whour.com/xpic/djESP.jpg","other_1":"","other_2":""},{"id":"2064","name":"东京暗鸦SwordOfSong漫画","cover_url":"http://img.1whour.com/xpic/东京暗鸦Sword.jpg","other_1":"","other_2":""},{"id":"943","name":"东京乌鸦漫画","cover_url":"http://img.1whour.com/xpic/东京乌鸦.jpg","other_1":"","other_2":""},{"id":"1954","name":"东京奇迹少年漫画","cover_url":"http://img.1whour.com/xpic/东京奇迹少年.jpg","other_1":"","other_2":""},{"id":"1106","name":"东京玩具箱漫画","cover_url":"http://img.1whour.com/xpic/东京玩具箱.jpg","other_1":"","other_2":""},{"id":"430","name":"东京MewMew漫画","cover_url":"http://img.1whour.com/xpic/0djmm.jpg","other_1":"","other_2":""},{"id":"358","name":"东京80年代漫画","cover_url":"http://img.1whour.com/xpic/363.jpg","other_1":"","other_2":""}]}} ''' def jsonSluper = new JsonSlurper() def object = jsonSluper.parseText(myJson) println object.body.search_result[0]

输出

[id:1393, name:东京食尸鬼漫画, cover_url: http://img.1whour.com/xpic/ 东京食尸鬼.jpg, other_1:, other_2:] 东京食尸鬼漫画

object -> json

def cars = [new Car(name: 'qihu',money: 2000),            new Car(name: 'qq',money: 1000),            new Car(name: 'haha',money: 3000)] def json = JsonOutput.toJson(cars) println JsonOutput.prettyPrint(json)

输出

[{"money":2000,"name":"qihu"},{"money":1000,"name":"qq"},{"money":3000,"name":"haha"}] [    {        "money": 2000,        "name": "qihu"    },    {        "money": 1000,        "name": "qq"    },    {        "money": 3000,        "name": "haha"    }]

xml操作

final String xml = '''                                                                 疯狂Android讲义                     李刚                                                      第一行代码                    郭林                                                    Android开发艺术探索                    任玉刚                                                     Android源码设计模式                    何红辉                                                                            Vue从入门到精通                    李刚                                          ''' def xmlSluper = new XmlSlurper() def resp = xmlSluper.parseText(xml) println resp.value.books[1].book[0].title.text()

输出

Vue从入门到精通

Groovy中的json和xml操作

//xmlresp同上  def list = [] resp.value.books.each {books->     books.book.each { book ->         def author =  book.author.text()         if (author == '李刚'){             list.add(book)         }     } } println list.toListString()

输出

[疯狂Android讲义李刚, Vue从入门到精通李刚]

//深度遍历 def titles1 = resp.depthFirst().findAll {book ->     return book.author.text() == '李刚' } def titles2 = resp.depthFirst().findAll {node ->     node.name() == 'book' && node.@id == '2' } println titles1 println titles2

输出

[疯狂Android讲义李刚, Vue从入门到精通李刚] [第一行代码郭林]

//广度遍历 def name = resp.value.books.children().findAll { node->     node.name() == 'book' && node.@id=='2' } println name

输出

第一行代码郭林

Groovy中生成xml用的是MarkupBuilder。例如要生成如下的xml文档

 Java  Groovy  JavaScript  

def sw = new StringWriter() def xmlBuilder = new MarkupBuilder(sw) xmlBuilder.langs(type: 'current', count: '3', mainstream: 'true') {     language(flavor: 'static', version: '1.5', "Java")     language(flavor: 'dynamic', version: '1.6', "Groovy")     language(flavor: 'dynamic', version: '1.9', "JavaScript") } println sw

一般我们生成xml都是用实体对象动态生成的定义class如下

//对应xml中的Langs结点 class Langs {     String type = "current"     int count = 3     boolean mainstream = true     def language = [new Language(flavor: "static", version: 1.5, value: "java"),                     new Language(flavor: "dynamic", version: 1.6, value: "Groovy"),                     new Language(flavor: "dynamic", version: 1.9, value: "JavaScript")] } //对应xml中的language结点 class Language {     String flavor     String version     String value }

def langs = new Langs() xmlBuilder.langs(type: langs.type, count: langs.count, mainstream: langs.mainstream) {     langs.language.each { lang ->         language(flavor: lang.flavor,                 version: lang.value,                 lang.value)     } } println sw

上面的生成方式也是可以的

华为云APP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:前端全栈学习第二章
下一篇:MRS二次开发(14/27): ES的Transport接口样例
相关文章