Groovy - JSON

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


JSON 函数

序号 Function & Libraries
1

JsonSlurper

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

结构,例如映射、列表和原始类型,例如 Integer、Double、Boolean 和 String。

2

JsonOutput

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


使用 JsonSlurper 解析数据

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

语法

def slurper = new JsonSlurper()

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

JsonSlurper 类带有几个用于解析器实现的变体。 在解析某些字符串时,有时您可能有不同的要求。 让我们举一个例子,其中需要读取从 Web 服务器的响应返回的 JSON。 在这种情况下,使用解析器 JsonParserLax 变体是有益的。 此解析器允许在 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 
		
      //将解析器类型设置为 JsonParserLax
      def parser = new JsonSlurper().setType(JsonParserType.LAX)
      def jsonResp = parser.parseText(jsonText)
   }
}

Groovy 中也提供了以下类似的附加解析器类型 −

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

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

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

解析文本

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

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