json - 在 Jenkins 管道上解析 JSON (groovy)
问题描述
我创建了一个方法,如网上所示:
@NonCPS
def parseJsonString(String jsonString) {
def lazyMap = new JsonSlurper().parseText(jsonString)
// JsonSlurper returns a non-serializable LazyMap, so copy it into a regular map before returning
def m = [:]
m.putAll(lazyMap)
return m
}
但我收到以下错误:
错误:java.io.NotSerializableException:groovy.json.internal.LazyMap
为了解决这个问题,我必须创建一个完整的方法来执行整个步骤。例如,在一个方法中,我会像上面那样做,解析我想要的信息,最后将它作为一个字符串返回。
然而,这带来了另一个问题,特别是如果您将此方法包装在 awithCredentials
中,这将需要另一个withCredentials
.
解决方案
我终于找到了更好的解决方案!
Jenkins“管道实用程序步骤”插件中的 readJSON() 方法,如下所示:
这是一个示例,我们最终可以抛弃丑陋的 GROOVY JSONPARSE 废话。
node() {
stage("checkout") {
def jsonString = '{"name":"katone","age":5}'
def jsonObj = readJSON text: jsonString
assert jsonObj['name'] == 'katone' // this is a comparison. It returns true
sh "echo ${jsonObj.name}" // prints out katone
sh "echo ${jsonObj.age}" // prints out 5
}
}
推荐阅读
- php - 查看存储在laravel公共/存储中的pdf?
- laravel - 推送器未使用 laravel 发送事件
- python - 如何在python中绘制集群?
- android - DaggerTestAppComponent 未在 Android 测试目录中生成
- c# - 为什么 float.IsFinite 在 Unity 中“未定义”?
- python - 有没有办法从机票网站上提取实时报价?
- html - 列表“图标”中的每个字典都应包含一个非空 UTF8 字符串字段“类型”
- sql - EF Core,FromSqlRaw 与 USE HINT
- node.js - Runtime.ImportModuleError - 错误:找不到模块“tslib”
- ios - Xcode签名错误没有签名证书