参考http://groovy-lang.org/json.html
本篇介绍groovy.json package的json处理功能
1. JsonSlurper
JsonSlurper处理json文本,并可以将json内容转换成Groovy数据结构,比如:maps, lists, Integer, Double, Boolean, String等.
parseText方法:
JsonSlurper实现了ECMA-404 JSON Interchange Standard,并且支持JavaScript注释及 Dates.
JsonSlurper也支持将JSON数组转换为lists.
JSON 标准支持以下原始数据类型:string, number, object, true, false, null. JsonSlurper 会将它们转换为对应的 Groovy 类型
JsonSlurper返回Groovy对象, 符合GPath表达式。GPath是一种功能很强的表达式语言,并通过 multiple slurpers 可以支持不同的数据格式,例如:XmlSlurper可以用于处理xml。想了解更多的细节,可以查看GPath表达式这一章节。下面是 JSON 类型与对应的 Groovy 数据类型,对照表:
1.1. 解析器
JsonSlurper实现了一些解析器。这些解析器可以满足某些特定场景下的不同需求:
JsonParserCharArray:将JSON字符串以字符array的方式处理,在处理过程中会拷贝字符的子数组加以处理(这种机制称为:chopping),这是JsonSlurper默认的解析器。
JsonFastParser: 是基于JsonParserCharArray的扩展,它是最快速的解析器。但不是默认解析器,也是有一定原因。JsonFastParser被称为index-overlay解析器。在解析JSON字符串的时候,其尽可能避免创建新的字符数组或字符串, 仅保持其指针在愿字符数组上, 此外, 也尽可能推迟对象的创建)。解析得到的map可能并没有被创建,仅由指向原始char buffer的指针构成,因此在需要long-term cache时必须要小心。JsonFastParser也提供了一种特殊的chop mode模式,可以尽早将char buffer切成小块,以保留原始buffer的小副本。建议在处理2MB以下的JSON数据时使用JsonFastParser,并且要并考虑到long-term cache限制。
JsonParserLax:是JsonParserCharArray解析器的一个特殊变体。它具有与JsonFastParser类似的性能特征,但不同之处在于它不完全依赖于ECMA-404 JSON语法。例如,它允许注释,没有引用字符串等。
JsonParserUsingCharacterSource: 用于处理大文件。它使用称为“字符窗口”的技术来解析大型JSON文件(大型文件大小超过2MB),性能不变
下表中列举了 JsonParserType 与 其实现的对照关系:
可以使用JsonSlurper#setType()来修改JsonParserType的解析器类型
2. JsonOutput
JsonOutput主要用于将Groovy对象序列化为JSON字符串,和JsonSlurper相对应。JsonOutput重载了toJson静态方法,支持不同的参数,返回结果是JSON格式的字符串。
JsonOutput支持原始类型、maps、lists,还可以支持POGOs(plain-old Groovy objects)。
2.1. 自定义output(>=v2.5.0)
JsonGenerator用来自定义output,JsonGenerator.Options采用builder模式实现,可以对output进行订制。
闭包可以用来转换类型。这些闭包转换器是为给定类型注册的,并且在任何时候遇到该类型或子类型时都会被调用。闭包的第一个参数是与转换器注册的类型匹配的对象,并且此参数是必需的。闭包可能需要一个可选的第二个字符串参数,如果有可用的话,它将被设置为键名。
2.1.1. 格式化Output
JsonOutput中的prettyPrint方法将JSON输出格式更漂亮
prettyPrint的参数是一个字符串;因此,它可以应用于任意的JSON字符串实例,而不仅仅是JsonOutput.toJson的结果。
2.2. Builders
Groovy中另一种创建JSON的方法是使用JsonBuilder或StreamingJsonBuilder。两者都提供了一个DSL,允许制定一个对象图,然后将其转换为JSON。
领取专属 10元无门槛券
私享最新 技术干货