Получить каждый ключ и значение из среды выбранного параметра json

У меня есть файл json в репозитории, в котором я хотел бы получить значения для каждого ключа в зависимости от выбранной среды. На данный момент выбранные параметры могут получить всю часть json выбранной среды. Например, я выбрал «Обновить» в приведенном ниже примере, но не знаю, как вызвать значение для каждого из них, например, «Печать этого» .....

$.[env].domain 
$.[env].resources 
$.[env].resources.db-schemas 
$.[env].resources.db-schemas.[name].jvm 
$.[env].jvm 
$.[env].jvm.[type] 
$.[env].jvm.[type](.jvm-name).ip 
$.[env].jvm.[type](.jvm-name.port)

Вывод, который я получаю, таков:

"level": 1,
        "domain": "develop.autosample.co.uk",
        "resources": {
            "db-schemas": {
                "rule": {
                    "schema": "pegarules",
                    "database": "sas_develop",
                    "jvm": ["primary", "secondary"]
                },
          .......
        .......

Но я хочу иметь возможность вызывать каждый ключ и значение выбранной среды json. Крутой скрипт:

#!/usr/bin/env groovy    

node{
    properties([
    parameters([

   choice(
        name: 'environment',
        choices: ['','Upgrade','BV' ],
        description: 'environment to choose'
        ),

    ])
]) 

    deleteDir()
        dir('dir-switch') {

    stage('Checkout') {
   
   // git branch: 'test-upgrade-json', url: 'https://gitlab.xxxxxxx/pipeline.git'
  // stash includes: '**', name: 'upgrade-pega'
        
checkout([$class: 'GitSCM', branches: [[name: '*/test-upgrade-json']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-user-github', url: 'https://gitlab.xxxxx/pipeline.git']]])
                
    }

     
            stage('Get Environment') {
            sh """
                ls -lart ./*
                ls ${env.WORKSPACE}
                cp -R ./upgrade-pega/environment/env.json  /${env.WORKSPACE}/dir-switch
                ls /${env.WORKSPACE}/dir-switch
            """
        
          }  


def obj = readJSON file: './env.json'
def list = obj[params.environment];

println list

list.each { println it }
/////   print each key and value in the json to be able to used in the code pipeline

stage('JVM check content') { 

/////   print each key and value in the json to be able to used in the code pipeline
    }
  }

}
        

JSON-файл:

  {
    "upgrade": {
        "level": 1,
        "domain": "develop.autosample.co.uk",
        "resources": {
            "db-schemas": {
                "rule": {
                    "schema": "pegarules",
                    "database": "sas_develop",
                    "jvm": ["primary", "secondary"]
                },
                "data": {
                    "schema": "pegadata",
                    "database": "sas_develop",
                    "jvm": ["primary", "secondary"]
                },
                "report": {
                    "schema": "pegareports",
                    "database": "sas_develop",
                    "jvm": ["primary", "secondary"]
                }
            }
        },
        "jvm": {
            "load-balancer": null,
            "pega": [{
                "jenkins-name": "ent-giem-sasw02",
                "host": "ent-giem-sasw02",
                "ip": "x.x.x.x"
            }],
            "db": {
                "primary": {
                    "jenkins-name": "ent-giem-sasrd26",
                    "host": "ent-giem-sasrd26",
                    "ip": "x.x.x.x",
                    "port": 5432
                },
                "secondary": {
                    "jenkins-name": "ent-giem-sasrd98",
                    "host": "ent-giem-pgrd98",
                    "ip": "x.x.x.x",
                    "port": 5432


                  }
                }
    
            }
        }
}

Могу ли я сохранить этот, например, обновленный образец исходящего json в переменную или файл и начать использовать jq?

@cyrus сократил образец json, а также ожидаемый результат. JSON теперь представляет собой одну среду, а не две.

user5820327 09.01.2023 20:45
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас уже есть объект JSON в памяти с переменной list. Теперь вы просто используете его в своем файле Steps или Jenkins.

На вашем месте я бы переименовал что-то, чтобы сделать его более понятным, например obj -> envConfig и list -> envSettings. Но вы можете ссылаться на такие вещи, как так:

stage('JVM...') {
   sh "echo ${envSettings.jvm.pega['jenkins-name']}"
}

Кроме того, я не уверен, что вы спрашиваете. Итерация по свойствам не работает (т.е. list.each { println( it ) }) или что-то еще?

Другие вопросы по теме