Как вложить список в список в Groovy - PullRequest
1 голос
/ 18 июня 2019

Вот мой оригинальный json

[
  {
    "city": "houston",
    "countyName": "county1",
    "email": "county1@gmail.com"
  },
  {
    "city": "houston",
    "countyName": "county1",
    "email": "county1a@gmail.com"
  },
  {
    "city": "houston",
    "countyName": "county2",
    "email": "county2@gmail.com"
  },
  {
    "city": "dallas",
    "countyName": "county1",
    "email": "countyDallas1@gmail.com"
  },
  {
    "city": "dallas",
    "countyName": "county2",
    "email": "countyDallas2@gmail.com"
  }
]

Я хочу преобразовать в:

[
  {
    "city": "houston",
    "counties": [
      {
        "countyName": "county1",
        "email": [
          "county1@gmail.com",
          "county1a@gmail.com"
        ]
      },
      {
        "countyName": "county2",
        "email": [
          "county2@gmail.com"
        ]
      }
    ]
  },
  {
    "city": "dallas",
    "counties": [
      {
        "countyName": "county1",
        "email": [
          "county1@gmail.com"
        ]
      },
      {
        "countyName": "county2",
        "email": [
          "county2@gmail.com"
        ]
      }
    ]
  }
]  

Я сделал, как показано ниже

groupBy{it.countyName}.values().collect{m-> [city: m.city[0], counties: m.counties.unique())]}  

, пока я группируюпо названию округа.
После этого я получаю значения.
Затем я собираю в новый список.
Я могу получить уникальный список округов, но я не знаю, как вложить как ожидаемый результат

groupBy{it.countyName}.values().collect{m-> [city: m.city[0], counties: m.counties.unique())]}  

Какая команда используется для вложения списка электронных писем в список округов

1 Ответ

1 голос
/ 18 июня 2019

Вы должны начать с группировки вашего списка ввода по названию города.Затем для каждого города вы можете сгруппировать оставшиеся данные по названию округа, чтобы собрать список адресов электронной почты.Рассмотрим следующий пример:

import groovy.json.JsonOutput
import groovy.json.JsonSlurper

def json = '''[
  {
    "city": "houston",
    "countyName": "county1",
    "email": "county1@gmail.com"
  },
  {
    "city": "houston",
    "countyName": "county1",
    "email": "county1a@gmail.com"
  },
  {
    "city": "houston",
    "countyName": "county2",
    "email": "county2@gmail.com"
  },
  {
    "city": "dallas",
    "countyName": "county1",
    "email": "countyDallas1@gmail.com"
  },
  {
    "city": "dallas",
    "countyName": "county2",
    "email": "countyDallas2@gmail.com"
  }
]'''

List list = new JsonSlurper().parseText(json)

def result = list.groupBy { it.city }.collect { cityName, cityData ->

    def counties = cityData.groupBy { it.countyName }.collect { countyName, countyData ->
        [countyName: countyName, email: countyData.collect { it.email }]
    }

    return [city: cityName, counties: counties]
}


println JsonOutput.prettyPrint(JsonOutput.toJson(result))

Вывод:

[
    {
        "city": "houston",
        "counties": [
            {
                "countyName": "county1",
                "email": [
                    "county1@gmail.com",
                    "county1a@gmail.com"
                ]
            },
            {
                "countyName": "county2",
                "email": [
                    "county2@gmail.com"
                ]
            }
        ]
    },
    {
        "city": "dallas",
        "counties": [
            {
                "countyName": "county1",
                "email": [
                    "countyDallas1@gmail.com"
                ]
            },
            {
                "countyName": "county2",
                "email": [
                    "countyDallas2@gmail.com"
                ]
            }
        ]
    }
]
...