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

# Json 反序列化

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

导包

import groovy.json.JsonSlurper

使用

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

jsonStr 的值

{
  "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

导包

import groovy.json.JsonBuilder

使用

def generator = new JsonGenerator.Options()
                .excludeFieldsByName('contentHash', 'originalClassName')
                .build()
        def jsonBuilder = new JsonBuilder(appConfigObj,generator);
        def appConfigJson = jsonBuilder.toString()

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

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

得到的 Json

{
	"message": "ok",
	"content": {
		"important": false,
		"version": "xxxxxx",
		"code": 28,
		"url": "AndroidFiles/xxxxxxxx.apk"
	},
	"state": 0
}

# JsonOutput

导包

import groovy.json.JsonOutput

使用

def json = JsonOutput.toJson(appConfigObj)

得到的 Json

{
	"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

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Logan 微信支付

微信支付

Logan 支付宝

支付宝

Logan 贝宝

贝宝