课程表

Groovy课程

工具箱
速查手册

Groovy JSON

当前位置:免费教程 » Java相关 » Groovy

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

JSON功能

功能
JsonSlurper

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

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

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

使用JsonSlurper解析数据

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

句法

  1. def slurper = new JsonSlurper()

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

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

让我们看下面这个例子。示例是使用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. }

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

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

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

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

文本解析

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

  1. import groovy.json.JsonSlurper
  2.  
  3. class Example {
  4. static void main(String[] args) {
  5. def jsonSlurper = new JsonSlurper()
  6. def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}')
  7. println(object.name);
  8. println(object.ID);
  9. }
  10. }

在线运行实例

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

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

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

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

以上程序的输出如下 -

  1. John
  2. 1

解析整数列表

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

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

在线运行实例

以上程序的输出如下 -

  1. List=[2, 3, 4, 5]

解析基本数据类型列表

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

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

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

在线运行实例

以上程序的输出如下 -

  1. 12
  2. 12.55
  3. 1.2E+14

JsonOutput

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

句法

  1. Static string JsonOutput.toJson(datatype obj)

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

返回类型 -返回类型是一个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. }

在线运行实例

以上程序的输出如下 -

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

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

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

在线运行实例

以上程序的输出如下 -

  1. [{"name":"John","ID":1},{"name":"Mark","ID":2}]
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号