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

11 篇文章 0 订阅
1 篇文章 0 订阅

前言

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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值