JSON
本章介绍如何使用Groovy语言解析和生成JSON对象。
JSON函数 (JSON Functions)
Sr.No | 功能与图书馆 |
---|---|
1 | JsonSlurper JsonSlurper是一个将JSON文本或读者内容解析为Groovy数据的类 结构,如地图,列表和原始类型,如Integer,Double,Boolean和String。 |
2 | JsonOutput 此方法负责将Groovy对象序列化为JSON字符串。 |
使用JsonSlurper解析数据
JsonSlurper是一个将JSON文本或读者内容解析为Groovy数据结构的类,如地图,列表和基本类型,如Integer,Double,Boolean和String。
语法 (Syntax)
def slurper = new JsonSlurper()
JSON slurper将文本或阅读器内容解析为List and Map的数据结构。
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解析器还支持string,number,object,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字符串。
语法 (Syntax)
Static string JsonOutput.toJson(datatype obj)
Parameters - 参数可以是数据类型的对象 - 数字,布尔值,字符,字符串,日期,映射,闭包等。
Return type - 返回类型是json字符串。
例子 (Example)
以下是如何实现这一目标的简单示例。
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}]