我有一个 JSON:
{
"range": "'All traffic",
"majorDimension": "ROWS",
"values": [
[
"Date",
"Sessions",
"Leeds",
"?ontact_query",
"wo_?ontact_query"
],
[
"20200107",
"3461",
"15",
"0",
"15"
],
[
"20200115",
"7824",
"43",
"0",
"43"
]
]
}
Run Code Online (Sandbox Code Playgroud)
values数组中的元素index[0]是 JSON 属性的名称。我想用以 index[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"
}
]
Run Code Online (Sandbox Code Playgroud)
我用有点奇怪的 JOLT 配置成功地做到了:
[
{
"operation": "shift",
"spec": {
"values": {
"0": null,
"*": {
"*": "[&1].@(2,[0].[&])"
}
}
}
},
{
"operation": "shift",
"spec": {
"0": null,
"*": "[]"
}
}
]
Run Code Online (Sandbox Code Playgroud)
但我想用 Groovy 脚本替换它。
我达到了以下解决方案:
def slurped = new JsonSlurper().parseText(text)
def val = slurped.values[0]
def json = slurped.values.collect{
[val, it].transpose().collectEntries()
}
Run Code Online (Sandbox Code Playgroud)
但它也会返回[0] element我应该跳过的值:
{
"Date":"Date",
"Sessions":"Sessions",
"Leeds":"Leeds",
"Contact_query":"Contact_query",
"wo_Contact_query":"wo_Contact_query"
}
Run Code Online (Sandbox Code Playgroud)
如何改进解决方案?
您可以使用pop删除集合的第一个值:
def values = new groovy.json.JsonSlurper().parseText(text).values;
def val = values.pop()
def json = values.collect { [val, it].transpose().collectEntries() }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |