在 Groovy 中,如何将 JSON 格式的字符串传递给函数,以便函数将其视为 JSON?

问题描述 投票:0回答:1

在 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"}

在被调用的函数中?谢谢!

groovy jenkins-pipeline
1个回答
0
投票

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
}
© www.soinside.com 2019 - 2024. All rights reserved.