• Groovy XML JSON


    XML是一种便携的开放源代码语言,允许程序员开发可以被其他应用程序读取的应用程序,而不管操作系统和/或开发语言。这是用于在应用程序之间交换数据的最常用的语言之一

    XML是什么?

    可扩展标记语言XML是一种非常类似于HTML或SGML的标记语言。这是万维网联盟推荐的,可作为开放标准。XML对于跟踪少量到中等数据量而不需要基于SQL的骨干非常有用。

    Groovy中的XML支持

    • XML标记构建器 - Groovy支持基于树的标记生成器BuilderSupport,它可以被子类化以生成各种树结构对象表示。通常,这些构建器用于表示XML标记,HTML标记。 Groovy的标记生成器捕获对伪方法的调用,并将它们转换为树结构的元素或节点。这些伪方法的参数被视为节点的属性。作为方法调用一部分的闭包被视为生成的树节点的嵌套子内容。

    • XML解析器 - Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。

    这是一个xml示例文件

    1. <collection shelf = "New Arrivals">
    2. <movie title = "Enemy Behind">
    3. <type>War, Thrillertype>
    4. <format>DVDformat>
    5. <year>2003year>
    6. <rating>PGrating>
    7. <stars>10stars>
    8. <description>Talk about a US-Japan wardescription>
    9. movie>
    10. <movie title = "Transformers">
    11. <type>Anime, Science Fictiontype>
    12. <format>DVDformat>
    13. <year>1989year>
    14. <rating>Rrating>
    15. <stars>8stars>
    16. <description>A schientific fictiondescription>
    17. movie>
    18. <movie title = "Trigun">
    19. <type>Anime, Actiontype>
    20. <format>DVDformat>
    21. <year>1986year>
    22. <rating>PGrating>
    23. <stars>10stars>
    24. <description>Vash the Stam pede!description>
    25. movie>
    26. <movie title = "Ishtar">
    27. <type>Comedytype>
    28. <format>VHSformat>
    29. <year>1987year>
    30. <rating>PGrating>
    31. <stars>2stars>
    32. <description>Viewable boredom description>
    33. movie>
    34. collection>

    XML标记生成器

    MarkupBuilder用于构造整个XML文档。通过首先创建XML文档类的对象来创建XML文档。一旦创建了对象,可以调用伪方法来创建XML文档的各种元素。

    1. import groovy.xml.MarkupBuilder
    2. class Example {
    3. static void main(String[] args) {
    4. def mB = new MarkupBuilder()
    5. // Compose the builder
    6. //mb.collection这是一个标记生成器,用于创建 的头XML标签
    7. mB.collection(shelf : 'New Arrivals') {
    8. //movie(title : 'Enemy Behind') -这些伪方法使用此方法创建带有值的标记的子标记。通过指定一个名为title的值,这实际上表示需要为该元素创建一个属性。
    9. movie(title : 'Enemy Behind')
    10. type('War, Thriller')
    11. format('DVD')
    12. year('2003')
    13. rating('PG')
    14. stars(10)
    15. description('Talk about a US-Japan war')
    16. }
    17. }
    18. }

    如果创建整个xml文档, 

    需要执行以下操作。

    • 需要创建映射条目以存储元素的不同值。
    • 对于地图的每个元素,我们将值分配给每个元素。
    1. import groovy.xml.MarkupBuilder
    2. class Example {
    3. static void main(String[] args) {
    4. def mp = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003',
    5. 'PG', '10','Talk about a US-Japan war'],
    6. 2 : ['Transformers','Anime, Science Fiction','DVD','1989',
    7. 'R', '8','A scientific fiction'],
    8. 3 : ['Trigun','Anime, Action','DVD','1986',
    9. 'PG', '10','Vash the Stam pede'],
    10. 4 : ['Ishtar','Comedy','VHS','1987', 'PG',
    11. '2','Viewable boredom ']]
    12. def mB = new MarkupBuilder()
    13. // Compose the builder
    14. def MOVIEDB = mB.collection('shelf': 'New Arrivals') {
    15. mp.each {
    16. sd ->
    17. mB.movie('title': sd.value[0]) {
    18. type(sd.value[1])
    19. format(sd.value[2])
    20. year(sd.value[3])
    21. rating(sd.value[4])
    22. stars(sd.value[4])
    23. description(sd.value[5])
    24. }
    25. }
    26. }
    27. }
    28. }

    XML解析

    Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。

    将movies.xml文件中的数据按照要求向用户输出

    1. import groovy.xml.MarkupBuilder
    2. import groovy.util.*
    3. class Example {
    4. static void main(String[] args) {
    5. def parser = new XmlParser()
    6. def doc = parser.parse("D:Movies.xml");
    7. doc.movie.each{
    8. bk->
    9. print("Movie Name:")
    10. println "${bk['@title']}"
    11. print("Movie Type:")
    12. println "${bk.type[0].text()}"
    13. print("Movie Format:")
    14. println "${bk.format[0].text()}"
    15. print("Movie year:")
    16. println "${bk.year[0].text()}"
    17. print("Movie rating:")
    18. println "${bk.rating[0].text()}"
    19. print("Movie stars:")
    20. println "${bk.stars[0].text()}"
    21. print("Movie description:")
    22. println "${bk.description[0].text()}"
    23. println("*******************************")
    24. }
    25. }
    26. }

    Groovy JSON 

    使用JsonSlurper解析数据

    JsonSlurper是一个将JSON文本或阅读器内容解析为Groovy数据结构的类,如地图,列表和原始类型,如Integer,Double,Boolean和String。

    示例是使用http模块从Web服务器获取JSON数据。对于这种类型的遍历,最好的选择是将解析器类型设置为JsonParserLax变体。

    1. http.request( GET, TEXT ) {
    2. headers.Accept = 'application/json'
    3. headers.'User-Agent' = USER_AGENT
    4. response.success = {
    5. res, rd ->
    6. def jsonText = rd.text
    7. //Setting the parser type to JsonParserLax
    8. def parser = new JsonSlurper().setType(JsonParserType.LAX)
    9. def jsonResp = parser.parseText(jsonText)
    10. }
    11. }

    文本解析

    1. import groovy.json.JsonSlurper
    2. class Example {
    3. static void main(String[] args) {
    4. def jsonSlurper = new JsonSlurper()
    5. //使用JsonSlurper类的parseText函数来解析一些JSON文本
    6. def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}')
    7. //获取对象时,看到实际上可以通过键访问JSON字符串中的值
    8. println(object.name);
    9. println(object.ID);
    10. }
    11. }

    解析整数列表

    1. import groovy.json.JsonSlurper
    2. class Example {
    3. static void main(String[] args) {
    4. def jsonSlurper = new JsonSlurper()
    5. Object lst = jsonSlurper.parseText('{ "List": [2, 3, 4, 5] }')
    6. lst.each { println it }
    7. }
    8. }

    解析基本数据类型列表

    JSON解析器还支持字符串,数字,对象,true,false和null的原始数据类型。 JsonSlurper类将这些JSON类型转换为相应的Groovy类型。

    1. import groovy.json.JsonSlurper
    2. class Example {
    3. static void main(String[] args) {
    4. def jsonSlurper = new JsonSlurper()
    5. def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}'''
    6. println(obj.Integer);
    7. println(obj.fraction);
    8. println(obj.double);
    9. }
    10. }

    JSON OUTPUT

    在json中打印输出,使用JsonOutput方法来完成。此方法负责将Groovy对象序列化为JSON字符串。

    1. import groovy.json.JsonOutput
    2. class Example {
    3. static void main(String[] args) {
    4. def output = JsonOutput.toJson([name: 'John', ID: 1])
    5. println(output);
    6. }
    7. }

    JsonOutput也可以用于普通的旧Groovy对象

    1. import groovy.json.JsonOutput
    2. class Example {
    3. static void main(String[] args) {
    4. def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
    5. new Student(name: 'Mark',ID:2)])
    6. println(output);
    7. }
    8. }
    9. class Student {
    10. String name
    11. int ID;
    12. }

     

     

  • 相关阅读:
    常见代码优化技术
    系统测试主要步骤
    性能优化-卡牌项目渲染优化
    中国人保为新希望医疗器械承保产品责任险,为消费者保驾护航!
    微服务间的测试策略
    超实用!产品经理如何提高自己的工作效率?
    2022-2028全球视频监控软件行业调研及趋势分析报告
    基于hutool实现国密SM2的加解密,简直不要太简单!
    Elasticsearch入门教程(未完成)
    【智慧医疗】Springboot+Vue+Element-UI前后端分离的医疗管理平台
  • 原文地址:https://blog.csdn.net/cvpatient/article/details/126173864