在 Jenkins 管道中,我执行了一个 AWS 命令,该命令为我提供了一组 JSON,如下所示
def jsonArray = readJSON text: sh(returnStdout: true,
script: "aws command sub-command ...")
如果我打印
jsonArray
我得到
{
"SomeAJsonArray": [
{
"key1": "valueA",
"key2": "valueB",
"key3": "valueC"
},
{
"key1": "valueX",
"key2": "valueY",
"key3": "valueZ"
},
// more json
]
}
现在我处理上面的输出,并且只存储符合条件的JSON,像这样
def processedJsonArray = []
jsonArray.SomeJsonArray.each {
if (it.key1.contains("valueX")) {
processedJsonArray.add(it)
}
}
如果我打印
processedJsonArray
的元素,我会得到
processedJsonArray.each {
println it
}
Output:
{"key1":"valueX","key2":"valueY","key3":"valueZ"}
这就是我所期望的,对吗?
现在,如果我将
processedJsonArray
的元素传递给函数,并在函数中打印传入的值,我不会得到 JSON 字符串。
processedJsonArray.each {
processJsonString(it)
}
// Called function
def processJsonString(final def jsonString) {
println jsonString
}
Output:
[key1:valueX, key2:valueY, key3:valueZ]
这是为什么呢?正确的方法是什么,所以我也明白了
{"key1":"valueX","key2":"valueY","key3":"valueZ"}
在被调用的函数中?谢谢!
readJSON
步骤将 json 字符串转换为数组/映射表示。
您可以通过调用
println jsonArray.getClass()
检查解析对象的类型
要将解析后的对象转换回 json 字符串,请使用 writeJSON 步骤
processedJsonArray.each {
def jsonString = writeJSON json:it, returnText:true // converts `it` to a json string
processJsonString( jsonString )
}
// Called function
def processJsonString(String jsonString) {
println jsonString
}