writeJSON groovy只将第一个值写入文件

2hh7jdfx  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(141)

下面是我的jenkinsgroovy脚本,用来读取数据并作为json文件写入。

import groovy.json.JsonOutput
def arn = ""
def name = ""
def os = ""
pipeline {
    agent any
stages {
    stage('Hello') {
        steps {
            script{

                def ret = sh(script: 'aws devicefarm list-devices', returnStdout: true)
                def jsonObj = readJSON text: ret
                def currentVersion = "13.0"
                def values = currentVersion.split('\\.')
                def json_str = ""
                for(String item: jsonObj.devices) {
                    os = item.os
                    if(!os.contains("\\.")) {
                        osV = os + ".0"
                    } else{
                        osV = os
                    }
                    def osValues = osV.split('\\.')
                    if(values[0].toInteger() <= osValues[0].toInteger()) {
                        name = item.name

                        def data = [
                            name: "$name",
                            os: "$os",
                        ]
                        json_str += JsonOutput.toJson(data)  
                    }
                }
                def json_beauty  = JsonOutput.prettyPrint(json_str)
                writeJSON(file: 'message124.json', json: json_beauty)
            }
        }
    }
}

}
但是这里,它只保存第一个值。而不是所有的值。你能告诉我我哪里错了吗

bqjvbblv

bqjvbblv1#

现在还不是100%清楚您最终想要什么,但我 * 认为 * 您想要一个JSON文件,其中包含OS大于一个幻数的项目。
提供足够的数据来重现问题是很有帮助的,并且消除所有不直接相关的东西。我认为你需要的是这样的东西:

jsonObj = [
  devices: [
    [ os: '3', name: 'Name 1'],
    [ os: '10.2', name: 'Name 10.2'],
    [ os: '7', name: 'Name 7'],
    [ os: '3', name: 'Name 3'],
  ],
]

values = ['5']

def normalizeOs(os) {
  os.contains(".") ? os : "$os.0"
}

def shouldSkip(normalizedOs) {
  osValues = os.split('\\.')
  values[0].toInteger() > osValues[0].toInteger()
}

selected = []
for (item: jsonObj.devices) {
  os = normalizeOs(item.os)
  if (shouldSkip(os)) continue

  selected.push([name: item.name, os: os])
}

json = new groovy.json.JsonBuilder(selected)
println(json)

输出:

[{"name":"Name 7","os":"7.0"},{"name":"Name 10.2","os":"10.2"}]

相关问题