×

Groovy 教程

Groovy 概述Groovy 环境Groovy 基本语法Groovy 数据类型Groovy 变量Groovy 运算符Groovy 循环Groovy 条件语句Groovy 方法Groovy 文件I/OGroovy 可选Groovy 数字Groovy 字符串Groovy 范围Groovy 列表Groovy 映射Groovy 日期和时间Groovy 正则表达式Groovy 异常处理Groovy 面向对象Groovy 泛型Groovy 特征Groovy 闭包Groovy 注释Groovy XMLGroovy JMXGroovy JSONGroovy DSLSGroovy 数据库Groovy 构建器Groovy 命令行Groovy 单元测试Groovy 模板引擎Groovy 元对象编程

Groovy JSON


本章介绍了如何使用Groovy语言来解析和生成JSON对象。

JSON功能

功能
JsonSlurper

JsonSlurper是一个将JSON文本或阅读器内容解析为Groovy数据的类

结构,例如地图,列表和原始类型,如整数,双精度,布尔和字符串。

JsonOutput 此方法负责将Groovy对象序列化为JSON字符串。

使用JsonSlurper解析数据

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

句法

def slurper = new JsonSlurper()

JSON slurper将文本或阅读器内容解析为列表和地图的数据结构。

JsonSlurper类自带了一些用于解析器实现的变体。有时,在解析某些字符串时,您可能有不同的要求。让我们举一个例子,其中需要读取从Web服务器的响应返回的JSON。在这种情况下,使用解析器JsonParserLax变量是有益的。此parsee允许在JSON文本中的注释以及没有引号字符串等。要指定此类型的解析器,您需要在定义JsonSlurper的对象时使用JsonParserType.LAX解析器类型。

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

http.request( GET, TEXT ) {
   headers.Accept = 'application/json'
   headers.'User-Agent' = USER_AGENT
	
   response.success = { 
      res, rd ->  
      def jsonText = rd.text 
		
      //Setting the parser type to JsonParserLax
      def parser = new JsonSlurper().setType(JsonParserType.LAX)
      def jsonResp = parser.parseText(jsonText)
   }
}

类似地,以下附加的解析器类型在Groovy中可用 -

  • JsonParserCharArray解析器基本上采用一个JSON字符串并对底层字符数组进行操作。在值转换期间,它复制字符子数组(称为“斩波”的机制)并单独操作它们。

  • JsonFastParser是JsonParserCharArray的一个特殊变体,是最快的解析器。JsonFastParser也称为索引覆盖解析器。在解析给定的JSON字符串期间,它尽可能努力地避免创建新的字符数组或String实例。它只保留指向底层原始字符数组的指针。此外,它会尽可能晚地推迟对象创建。

  • JsonParserUsingCharacterSource是一个非常大的文件的特殊解析器。它使用一种称为“字符窗口化”的技术来解析具有恒定性能特征的大型JSON文件(大型意味着超过2MB大小的文件)。

文本解析

让我们来看看一些如何使用JsonSlurper类的例子。

import groovy.json.JsonSlurper 

class Example {
   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}') 
		
      println(object.name);
      println(object.ID);
   } 
}

在上面的例子中,我们是 -

  • 首先创建JsonSlurper类的一个实例

  • 然后我们使用JsonSlurper类的parseText函数来解析一些JSON文本。

  • 当我们获取对象时,您可以看到我们实际上可以通过键访问JSON字符串中的值。

以上程序的输出如下 -

John 
1

解析整数列表

让我们来看看另一个JsonSlurper解析方法的例子。在下面的示例中,我们将列出整数列表。你会注意到下面的代码,我们可以使用每个的List方法,并传递一个闭包。

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

以上程序的输出如下 -

List=[2, 3, 4, 5, 23, 42]

解析基本数据类型列表

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

以下示例显示如何使用JsonSlurper解析JSON字符串。在这里,您可以看到JsonSlurper能够将各个项目解析为各自的基本类型。

import groovy.json.JsonSlurper 
class Example {

   static void main(String[] args) {
      def jsonSlurper = new JsonSlurper()
      def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}'''
		
      println(obj.Integer);
      println(obj.fraction);
      println(obj.double); 
   } 
}

以上程序的输出如下 -

12 
12.55 
1.2E+14 

JsonOutput

现在让我们谈谈如何在Json中打印输出。这可以通过JsonOutput方法来完成。此方法负责将Groovy对象序列化为JSON字符串。

句法

Static string JsonOutput.toJson(datatype obj)

参数 -参数可以是数据类型的对象 - 数字,布尔,字符,字符串,日期,地图,闭包等。

返回类型 -返回类型是一个JSON字符串。

例子

以下是如何实现这一点的简单示例。

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

以上程序的输出如下 -

{"name":"John","ID":1}

JsonOutput也可以用于普通的旧Groovy对象。在下面的示例中,您可以看到我们实际上是传递Student类型的对象到JsonOutput方法。

import groovy.json.JsonOutput  
class Example {
   static void main(String[] args) {
      def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
         new Student(name: 'Mark',ID:2)])
      println(output);  
   } 
}
 
class Student {
   String name
   int ID; 
}

以上程序的输出如下 -

[{"name":"John","ID":1},{"name":"Mark","ID":2}]

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)