📜  Groovy-JSON

📅  最后修改于: 2020-11-04 06:48:53             🧑  作者: Mango


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

JSON函数

Sr.No Function & Libraries
1

JsonSlurper

JsonSlurper is a class that parses JSON text or reader content into Groovy data

Structures such as maps, lists and primitive types like Integer, Double, Boolean and String.

2

JsonOutput

This method is responsible for serialising Groovy objects into JSON strings.

使用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期间,它会尽力避免创建新的char数组或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]

解析原始数据类型列表

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 

杰森输出

现在让我们讨论一下如何在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}]