Groovy语言处理Json

  • ~2.33K 字

最近处理Jenkins自动化编译,自己手动写了个打包脚本,需要对Json进行操作。

Json反序列化

由于在gradle文件中无法调用外部Gson,所以采用groovy自带的Json处理

导包

1
import groovy.json.JsonSlurper

使用

1
def outJsonConfig = new JsonSlurper().parseText(jsonStr)

jsonStr的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"version": 1,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.xxxx.xxx",
"variantName": "huaceDebug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"properties": [],
"versionCode": 28,
"versionName": "28",
"enabled": true,
"outputFile": "xxx.debug.v1.0.28.20240619.apk"
}
]
}

序列化的结果

Json序列化

两种方法

JsonBuilder

导包

1
import groovy.json.JsonBuilder

使用

1
2
3
4
5
6
def generator = new JsonGenerator.Options()
.excludeFieldsByName('contentHash', 'originalClassName')
.build()
def jsonBuilder = new JsonBuilder(appConfigObj,generator);

def appConfigJson = jsonBuilder.toString()

这里有一个JsonGenerator,主要是因为在将对象序列化成Json时会自动生成两个字段contentHashoriginalClassName 并且嵌套对象的每一层都会存在

为了去除多余的字段,所以使用generator去除

得到的Json

1
2
3
4
5
6
7
8
9
10
{
"message": "ok",
"content": {
"important": false,
"version": "xxxxxx",
"code": 28,
"url": "AndroidFiles/xxxxxxxx.apk"
},
"state": 0
}

JsonOutput

导包

1
import groovy.json.JsonOutput

使用

1
def json = JsonOutput.toJson(appConfigObj)

得到的Json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"contentHash": "6f6ffcd51be2a62dbd1311a085f96e46",
"originalClassName": "JsonBody",
"message": "ok",
"content": {
"contentHash": "5832596251b548949b3903af6e7712c2",
"important": false,
"originalClassName": "JsonContent",
"version": "pyh.debug.v1.0.28.20240619",
"code": 28,
"url": "AndroidFiles/pyh.debug.v1.0.28.20240619.apk"
},
"state": 0
}

可以看到有自动生成两个字段contentHashoriginalClassName

为了保证数据整洁,还是选用JsonBuilder

赞助喵
非常感谢您的喜欢!
赞助喵
分享这一刻
让朋友们也来瞅瞅!