groovy - 如何在 Groovy 中的列表中嵌套列表
问题描述
这是我原来的 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())]}
哪个命令用于将电子邮件列表嵌套在县列表中
解决方案
您应该首先按城市名称对输入列表进行分组。然后对于每个城市,您可以按县名对剩余数据进行分组,以收集电子邮件地址列表。考虑以下示例:
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"
]
}
]
}
]
推荐阅读
- sql - sql中一组列的一个值
- javascript - 为什么在 JS 中递归比迭代快?
- excel - 将 CSV-UTF8 保存到现有文件路径?
- c++ - Visual Studio 中这个 C++ 指针程序的神秘错误
- c# - 从 3.1 更新到 5.0 后,托管在 AAD B2C 中的 Msal 身份验证不会自动刷新令牌
- firebase - 来自传感器的传感器读数未按顺序存储在 Firebase 实时数据库中
- python-3.x - 无法将字符串与python 3中的excel单元格数据进行比较
- tensorflow - 在 TensorFlow Hub 中访问权重和层
- android-camera - 如何使用 Google ARCore 获取相机的内在和外在参数矩阵
- firebase - 如何解决此 Expo Firebase 错误消息