在 JOLT 中将数组值映射到 JSON
Mapping array value to JSON in JOLT
这是我的 JSON 示例:
{
"totalElements": 168,
"columns": {
"dimension": {
"id": "variables/daterangehour",
"type": "time"
},
"columnIds": [
"1"
]
},
"rows": [
{
"itemId": "119050300",
"value": "00:00 2019-06-03",
"data": [
120,
10
]
},
{
"itemId": "119050805",
"value": "05:00 2019-06-08",
"data": [
98,
12
]
},
{
"itemId": "119050923",
"value": "23:00 2019-06-09",
"data": [
172,
8
]
}
]
}
这是我的 JOLT:
[{
"operation": "shift",
"spec": {
"rows": {
"*": {
"value": "[&1].date",
"data": {
"*": "[&2].metric1"
}
}
}
}
}
]
它输出的是:
[ {
"date" : "00:00 2019-06-03",
"metric1" : [ 120, 10 ]
}, {
"date" : "05:00 2019-06-08",
"metric1" : [ 98, 12 ]
}, {
"date" : "23:00 2019-06-09",
"metric1" : [ 172, 8 ]
} ]
但是我想要输出的是这样的:
[ {
"date" : "00:00 2019-06-03",
"metric1" : 120
"metric2" : 10
}, {
"date" : "05:00 2019-06-08",
"metric1" 98
"metric2: 12
}, {
"date" : "23:00 2019-06-09",
"metric1" : 172
"metric2" : 8
} ]
如何映射到特定的数组值而不是返回全部值?它似乎是在第一个项目 select 的 metric1 行上的通配符周围,但我找不到执行此操作的任何代码。
当你使用下面的通配符时,这意味着 data
数组的每一项都应该映射到键 [&2].metric1
,这使得 metric1
字段成为一个数组。
"data": {
"*": "[&2].metric1"
}
你应该做的是将 data
数组的第一个元素(索引 0
处的元素)映射到 metric1
键和第二个元素(索引 1
处的元素) ) 到 metric2
键,如下所示。
[
{
"operation": "shift",
"spec": {
"rows": {
"*": {
"value": "[&1].date",
"data": {
"0": "[&2].metric1",
"1": "[&2].metric2"
}
}
}
}
}
]
这是我的 JSON 示例:
{
"totalElements": 168,
"columns": {
"dimension": {
"id": "variables/daterangehour",
"type": "time"
},
"columnIds": [
"1"
]
},
"rows": [
{
"itemId": "119050300",
"value": "00:00 2019-06-03",
"data": [
120,
10
]
},
{
"itemId": "119050805",
"value": "05:00 2019-06-08",
"data": [
98,
12
]
},
{
"itemId": "119050923",
"value": "23:00 2019-06-09",
"data": [
172,
8
]
}
]
}
这是我的 JOLT:
[{
"operation": "shift",
"spec": {
"rows": {
"*": {
"value": "[&1].date",
"data": {
"*": "[&2].metric1"
}
}
}
}
}
]
它输出的是:
[ {
"date" : "00:00 2019-06-03",
"metric1" : [ 120, 10 ]
}, {
"date" : "05:00 2019-06-08",
"metric1" : [ 98, 12 ]
}, {
"date" : "23:00 2019-06-09",
"metric1" : [ 172, 8 ]
} ]
但是我想要输出的是这样的:
[ {
"date" : "00:00 2019-06-03",
"metric1" : 120
"metric2" : 10
}, {
"date" : "05:00 2019-06-08",
"metric1" 98
"metric2: 12
}, {
"date" : "23:00 2019-06-09",
"metric1" : 172
"metric2" : 8
} ]
如何映射到特定的数组值而不是返回全部值?它似乎是在第一个项目 select 的 metric1 行上的通配符周围,但我找不到执行此操作的任何代码。
当你使用下面的通配符时,这意味着 data
数组的每一项都应该映射到键 [&2].metric1
,这使得 metric1
字段成为一个数组。
"data": {
"*": "[&2].metric1"
}
你应该做的是将 data
数组的第一个元素(索引 0
处的元素)映射到 metric1
键和第二个元素(索引 1
处的元素) ) 到 metric2
键,如下所示。
[
{
"operation": "shift",
"spec": {
"rows": {
"*": {
"value": "[&1].date",
"data": {
"0": "[&2].metric1",
"1": "[&2].metric2"
}
}
}
}
}
]