如何用 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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章