在Groovy中转置JSON
我有一个JSON:在Groovy中转置JSON,groovy,Groovy,我有一个JSON: { "range": "'All traffic", "majorDimension": "ROWS", "values": [ [ "Date", "Sessions", "Leeds",
{
"range": "'All traffic",
"majorDimension": "ROWS",
"values": [
[
"Date",
"Sessions",
"Leeds",
"Сontact_query",
"wo_Сontact_query"
],
[
"20200107",
"3461",
"15",
"0",
"15"
],
[
"20200115",
"7824",
"43",
"0",
"43"
]
]
}
索引为[0]的值数组中的元素是JSON属性的名称。我想用索引[0+]开始的值映射这些名称。每个索引的值数可以不同。映射应该是动态的,没有硬索引
我想获得以下JSON:
[
{
"Date": "20200107",
"Sessions": "3461",
"Leeds": "15",
"Contact_query": "0",
"wo_Contact_query": "15"
},
{
"Date": "20200115",
"Sessions": "7824",
"Leeds": "43",
"Contact_query": "0",
"wo_Contact_query": "43"
}
]
我用一种奇怪的震动配置成功地做到了:
[
{
"operation": "shift",
"spec": {
"values": {
"0": null,
"*": {
"*": "[&1].@(2,[0].[&])"
}
}
}
},
{
"operation": "shift",
"spec": {
"0": null,
"*": "[]"
}
}
]
但我想用Groovy脚本替换它
我达成了以下解决方案:
def slurped = new JsonSlurper().parseText(text)
def val = slurped.values[0]
def json = slurped.values.collect{
[val, it].transpose().collectEntries()
}
但它也会返回[0]元素的值,我应该跳过哪个元素:
{
"Date":"Date",
"Sessions":"Sessions",
"Leeds":"Leeds",
"Contact_query":"Contact_query",
"wo_Contact_query":"wo_Contact_query"
}
如何改进解决方案?您可以使用pop删除集合的第一个值:
def values = new groovy.json.JsonSlurper().parseText(text).values;
def val = values.pop()
def json = values.collect { [val, it].transpose().collectEntries() }
可以使用pop删除集合的第一个值:
def values = new groovy.json.JsonSlurper().parseText(text).values;
def val = values.pop()
def json = values.collect { [val, it].transpose().collectEntries() }
使用和的另一个选项:
使用和的另一个选项: