【发布时间】:2020-12-30 15:33:50
【问题描述】:
我有一个 JSON:
{
"reports": [
{
"columnHeader": {
"metricHeader": {
"metricHeaderEntries": [
{
"name": "ga:sessions",
"type": "INTEGER"
},
{
"name": "ga:bounces",
"type": "INTEGER"
},
{
"name": "ga:sessionDuration",
"type": "TIME"
},
{
"name": "ga:pageviews",
"type": "INTEGER"
}
]
}
},
"data": {
"rows": [
{
"metrics": [
{
"values": [
"25",
"18",
"1269.0",
"27"
]
}
]
}
],
"totals": [
{
"values": [
"25",
"18",
"1269.0",
"27"
]
}
],
"rowCount": 1,
"minimums": [
{
"values": [
"25",
"18",
"1269.0",
"27"
]
}
],
"maximums": [
{
"values": [
"25",
"18",
"1269.0",
"27"
]
}
],
"isDataGolden": true
}
}
]
}
metricHeaderEntries 和 values 是分开的。值在data.totals 数组中(顺序保存正确)。
我想修改 JSON 并获得以下结构(或类似于此,我只需要对 metric.name = metric.value):
{
"metrics": [
{
"name": "ga:sessions",
"value": "25"
},
{
"name": "ga:bounces",
"type": "18"
},
{
"name": "ga:sessionDuration",
"type": "1269.0"
},
{
"name": "ga:pageviews",
"type": "27"
}
],
"isDataGolden": true
}
JOLT 可以吗?
之前我只使用shift 规范来完成一些非常简单的任务。以下规格:
[
{
"operation": "shift",
"spec": {
"reports": {
"*": {
"columnHeader": {
"metricHeader": {
"metricHeaderEntries": {
"*": {
"name": "@(1,name)"
}
}
}
},
"isDataGolden": "isDataGolden"
}
}
}
}
]
返回:
{
"ga:sessions" : "ga:sessions",
"ga:bounces" : "ga:bounces",
"ga:sessionDuration" : "ga:sessionDuration",
"ga:pageviews" : "ga:pageviews"
}
“几乎”。当然不是我想要的。我需要一个数组metrics,其中包含name 和value 字段,如上所述。但我不知道如何从data.totals 获取这些值并将它们放入指标中。 isDataGolden 也消失了。我读了一些关于modify-overwrite-beta 的文章,我可以将它用于我的案例吗?
【问题讨论】:
-
脚本而不是 jolt 怎么样?
-
如果 JOLT 无法实现,或者 JOLT 难以实现,我可以使用脚本。什么样的脚本?
-
reports下有多个元素怎么办? -
你的意思是这个场景的 JOLT 配置?我想如果我不能用 JOLT 解决它,我只是误会了。那么,脚本应该解决这个问题吗?我的脚本应该做什么?
标签: json apache-nifi jolt