源JSON:
{
"kind": "analytics#mcfData",
"containsSampledData": false,
"columnHeaders": [
{
"name": "mcf:conversionDate",
"columnType": "DIMENSION",
"dataType": "STRING"
},
{
"name": "mcf:source",
"columnType": "DIMENSION",
"dataType": "STRING"
},
{
"name": "mcf:assistedConversions",
"columnType": "METRIC",
"dataType": "INTEGER"
},
{
"name": "mcf:lastInteractionConversions",
"columnType": "METRIC",
"dataType": "INTEGER"
}
],
"totalsForAllResults": {
"mcf:assistedConversions": "62435",
"mcf:lastInteractionConversions": "156469"
},
"rows": [
[
{
"primitiveValue": "20210501"
},
{
"primitiveValue": "Arena"
},
{
"primitiveValue": "30604"
},
{
"primitiveValue": "75593"
}
],
[
{
"primitiveValue": "20210502"
},
{
"primitiveValue": "Arena"
},
{
"primitiveValue": "31831"
},
{
"primitiveValue": "80876"
}
]
]
}预期:
[
{
"report_date": "2021-05-01",
"metric_name": "mcf:assistedConversions",
"metric_value": "30604"
},
{
"report_date": "2021-05-01",
"metric_name": "mcf:lastInteractionConversions",
"metric_value": "75593"
},
{
"report_date": "2021-05-02",
"metric_name": "mcf:assistedConversions",
"metric_value": "31831"
},
{
"report_date": "2021-05-02",
"metric_name": "mcf:lastInteractionConversions",
"metric_value": "80876"
}
]我需要从源JSON获得的东西:
mcf:conversionDate
columnHeaders忽略元素的columnType = DIMENSION除外,除了columnType = METRIC.的所有元素rows数组中由columnHeaders排序的元素。
我的尝试:
def slurper = new JsonSlurper()
def json = slurper.parseText('')
def headers = json.columnHeaders
def result = json.rows.collectMany{
[headers, it].transpose().collect{ h, v ->
[
metric_name: h.name,
metric_value: v
]
}
}输出:
[
{
"metric_name": "mcf:conversionDate",
"metric_value": {
"primitiveValue": "20210501"
}
},
{
"metric_name": "mcf:source",
"metric_value": {
"primitiveValue": "Arena"
}
},
{
"metric_name": "mcf:assistedConversions",
"metric_value": {
"primitiveValue": "30604"
}
},
{
"metric_name": "mcf:lastInteractionConversions",
"metric_value": {
"primitiveValue": "75593"
}
},
{
"metric_name": "mcf:conversionDate",
"metric_value": {
"primitiveValue": "20210502"
}
},
{
"metric_name": "mcf:source",
"metric_value": {
"primitiveValue": "Arena"
}
},
{
"metric_name": "mcf:assistedConversions",
"metric_value": {
"primitiveValue": "31831"
}
},
{
"metric_name": "mcf:lastInteractionConversions",
"metric_value": {
"primitiveValue": "80876"
}
}
]如何添加如上所述的report_date?它存储在mcf:conversionDate内部。并去掉metric_value中嵌套的json
发布于 2021-06-17 05:52:32
def headers = json.columnHeaders
def result = json.rows.collect{
/* transform each row to a map like this:
"mcf:conversionDate": "20210502",
"mcf:source": "Arena",
"mcf:assistedConversions": "31831",
"mcf:lastInteractionConversions": "80876"
*/
[headers, it].transpose().collectEntries{h,v->
[
h.name,
v.primitiveValue
]
}
}.collectMany{map->
def date = map.remove("mcf:conversionDate") //get date and remove from map
map.findAll{k,v-> k in ["mcf:assistedConversions","mcf:lastInteractionConversions"] }
.collect{k,v->
[
report_date: date,
metric_name: k,
metric_value: v,
]
}
}
println (new groovy.json.JsonBuilder(result).toPrettyString())https://stackoverflow.com/questions/68009597
复制相似问题