如何用 Groovy 做 Json串的生成(序列化)和解析(反序列化)工作

前言

Json格式是web开发常用的信息交换格式,规范简单,生成的内容易于理解。
Groovy 中对Json的支持还是比较丰富的,下面我们就一起来看看如何使用Groovy完成常见的Json串解析(序列化)和反解(反序列化)任务。

1. 生成 json 串的几种方法

从简单到复杂,依次是“用 JsonOutput”、“用 JsonBuilder”、“用 JsonStreamBuilder” 方法,以及使用 Java 的 Json 工具库,如 FastJson 生成。

1.1 用 JsonOutput 生成 Json串

当我们有一个 object,需要把它序列化为 json串时,我们可以这样写

ComplexClass object = new ComplexClass()
String jsonString = JsonOutput.toJson(object)

非常的简单,而且我们还可以用 Category 方法让某个类具备 toJson() 方法。

use(JsonOutput) {
    ComplexClass object = new ComplexClass()
    ComplexClass2 object2 = new ComplexClass2()
    String jsonString = object.toJson()
    String jsonString2 = object2.toJson()
}

1.2 用 JsonGenerator 更灵活地生成 Json串

如果我们不想让某些属性出现在 json 串中,可以这样写

class TenantStaff {
    String userName
    String password
    Date dateCreated
    Date lastUpdated
    StringProperty elementNameProperty
    ObservableList children
}

def generator = new JsonGenerator.Options()
	.excludeFieldsByName('elementNameProperty')
	.excludeFieldsByType(Date, ObservableList)
	.build()
	
String jsonString = generator.toJson(object)
assert generator.toJson(person) == '{"userName":"xxx","password":"xxx"}'

但是,如果我们想将对象的属性改个名字,或是取属性对象的属性,那么 JsonGenerator 是无能为力的,需要用 JsonBuilder 来实现。

1.3 用 JsonBuilder 生成 Json 串

【TODO,后面空着的都是 TODO】

1.4 用JsonStreamBuilder 生成 Json 串

2. 解析 Json 串的方法

2.1 用 JsonSlurper 解析 Json 串

2.2 将 json串得到的GroovyObject转换为具体的领域类

2.3 用 FastJson 解析 json串 的方法

思考

如何能在反解 json 串时,更方便地利用 groovy 的 DSL 能力,指定特定属性的转换规则?也许我们可以自己开发一套这样的DSL。

这套DSL可以让我们这样配置和解析 json 串:

DomainClass complexObject = Json.parseRules {
   prop.subProp.rule = new DateRule
   prop2.rule = { new SpecialClass(it.value) }
}.parse(jsonString)
发布了46 篇原创文章 · 获赞 7 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/yangbo_hr/article/details/104533233