Pushing Values to Inner Array with Jolt



我需要从嵌套数组创建一个平面数组。输入JSON看起来像

[
{
"resource": "r1",
"application": "app1",
"description": "desc1",
"type": "t1",
"labels": [
{
"instance": "i1",
"team": "yellow",
"network": "nnn",
"environment": "prod",
"value": 77,
"stat": "some stat"
},
{
"instance": "i2",
"team": "green",
"network": "mmm",
"environment": "prod",
"value": 0.1
}
]
},
{
"resource": "r2",
"application": "app2",
"description": "desc2",
"type": "t2",
"labels": [
{
"instance": "i3",
"team": "red",
"network": "vvv",
"environment": "prod",
"value": 6457
}
]
}
]

期望输出为

[
{
"resource": "r1",
"application": "app1",
"description": "desc1",
"type": "t1",
"instance": "i1",
"team": "yellow",
"network": "nnn",
"environment": "prod",
"value": 77,
"stat": "some stat"
},
{
"resource": "r1",
"application": "app1",
"description": "desc1",
"type": "t1",
"instance": "i2",
"team": "green",
"network": "mmm",
"environment": "prod",
"value": 0.1
},
{
"resource": "r2",
"application": "app2",
"description": "desc2",
"type": "t2",
"instance": "i3",
"team": "red",
"network": "vvv",
"environment": "prod",
"value": 6457
}
]

这只是一个例子,我需要能够处理不同键的数据。基本上,每个标签都需要是根级数组的一个项目,并将其所属资源的键和值添加到其中。我试过了:

[
{
"operation": "shift",
"spec": {
"*": {
"*": "[&1].&",
"labels": {
"*": {
"*": "[&1].&"
}
}
}
}
}
]

但是结果是

[
{
"resource": "r1",
"application": "app1",
"description": "desc1",
"type": "t1",
"instance": [ "i1" , "i3" ],
"team": [ "yellow", "red" ],
"network": [ "nnn", "vvv" ],
"environment": [ "prod", "prod" ],
"value": [ 77, 6457 ],
"stat": "some stat"
},
{
"instance": "i2",
"team": "green",
"network": "mmm",
"environment": "prod",
"value": 0.1,
"resource": "r2",
"application": "app2",
"description": "desc2",
"type": "t2"
}
]
有谁能帮我一下吗?

通过保持外层元素的键值对固定的同时保持它们的动态labels数组,您可以使用:

[
{
"operation": "shift",
"spec": {
"*": {
"labels": {
"*": {
"@(2,resource)": "&3.[&].resource",
"@(2,application)": "&3.[&].application",
"@(2,description)": "&3.[&].description",
"@(2,type)": "&3.[&].type",
"*": "&3.[&1].&"
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": ""
}
}
}
]

第二个规范用于在分隔对象时清除索引中的废墟。

最新更新