Преобразовать файл json в многорядную таблицу с матрицей всех вложенных объектов. - PullRequest
0 голосов
/ 20 января 2020

Чтобы использовать плагин Jenkins для расширенного выбора, мне нужно создать файл, содержащий матрицу с несколькими параметрами, такими как:

    Country     State   City
    USA         FL      Miami
    USA         FL      Tampa
    USA         FL      Jacksonville
    USA         NY      NYC
    USA         NY      Rochester
    USA         NY      Syracuse

Учитывая, что этот список может быть довольно сложной задачей, Я думал о создании файла json, например ((

["USA":       
 [{        
      "NY": [
            "NYC",
            "Rochester",
            "Syracuse"
    ],
    "FL": [
            "Miami",
            "Tampa",
            "Jacksonville",
   etc...

). Вопрос в том, как преобразовать файл JSON со многими вложенными объектами в матрицу, в которой последний столбец всегда самый глубокий вложенный объект?

В качестве альтернативы, есть ли другой способ сохранить файл параметров поддерживаемым?

Я могу использовать bash, python et c ...

Спасибо!

1 Ответ

1 голос
/ 20 января 2020

Родной язык Jenkins и его плагинов - Groovy. И это всегда ваш лучший выбор для общего программирования. Учитывая, что ваши штаты и города правильно отформатированы в формате JSON, вы можете использовать Groovy, json для его обработки. Вот пример кода:

import groovy.json.*
str="""
{
    "country": {"name": "USA",
    "states": [
        {
            "name": "NY",
            "towns": [
                "NYC",
                "Rochester",
                "Syracuse"
            ]
        },
        {
            "name": "FL",
            "towns": [
                "Miami",
                "Tampa",
                "Jacksonville"
            ]
        }
    ]
}
}

"""

jsonSlurper = new JsonSlurper()
gstr=jsonSlurper.parseText(str)

stateRow=[]
gstr.country.states.each{    
        it.towns.each{tn->
        row =[]
        row.add(gstr.country.name)
        row.add(it.name)
        row.add(tn)
        stateRow.add(row.join(','))
    }
}
stateRow.each{
println it
}
return stateRow

Этот код возвращает таблицу с названиями городов, являющимися последним столбцом

USA,NY,NYC
USA,NY,Rochester
USA,NY,Syracuse
USA,FL,Miami
USA,FL,Tampa
USA,FL,Jacksonville
Result: ['USA,NY,NYC', 'USA,NY,Rochester', 'USA,NY,Syracuse', 'USA,FL,Miami', 'USA,FL,Tampa', 'USA,FL,Jacksonville']
...