我有一个嵌套的 JSON,如下所示。对象中的键和值需要分成 2 组数组,如预期输出所示。
输入:
{
"ms": [
{
"ts": "2024-02-13T12:43:00.000Z",
"ls": {
"nr1:name1": {
"UE": 0.1,
"LE": 3,
"TG": 5,
"UW": null,
"LW": null
}
},
"ss": {
"nr1:name1": [
5.3
]
}
},
{
"ts": "2024-02-13T12:43:00.000Z",
"ls": {
"nr2:name2": {
"UE": 0.1,
"LE": 0,
"TG": 0,
"UW": null,
"LW": null
}
},
"ss": {
"nr2:name2": [
0.03
]
}
}
]
}
当前输出为
{
"ts" : [ "2024-02-13T12:43:00.000Z", "2024-02-13T12:43:00.000Z" ],
"nrs" : [ "nr1", "nr2" ],
"names" : [ "name1", "name2" ],
"paramnames" : [ "UE", "LE", "TG", "UW", "LW", "UE", "LE", "TG", "UW", "LW" ],
"values" : [ 0.1, 3, 5, null, null, 0.1, 0, 0, null, null ],
"act" : [ 5.3, 0.03 ]
}
预期输出是
{
"ts": [ "2024-02-13T12:43:00.000Z", "2024-02-13T12:43:00.000Z" ],
"nrs" : [ "nr1", "nr2" ],
"names" : [ "name1", "name2" ],
"paramnames": {
[
"UE",
"LE",
"TG",
"UW",
"LW"
],
[
"UE",
"LE",
"TG",
"UW",
"LW"
]
},
"values": {
[
0.1,
3,
5,
null,
null
],
[
0.1,
0,
0,
null,
null
]
},
"act": [ 5.3, 0.03 ]
}
我的 JOLT 规格看起来像这样
[
{
"operation": "shift",
"spec": {
"ms": {
"*": {
"ts": "ts",
"ls": {
"@0": {
"*:*": {
"$(0,1)": "nrs",
"$(0,2)": "names",
"*": {
"$": "paramnames",
"@": "values"
}
}
}
},
"ss": {
"*:*": {
"*": "act"
}
}
}
}
}
}
]
需要根据 ms 数组中的每个元素将参数名称和值分类为子数组,但我无法做到这一点。有人可以帮忙吗?谢谢。
您需要添加
[&4]
以便使用最外层数组的索引,该数组在树的级别内向上 4 层声明。另外,以"@0"
开头的节点是多余的。因此,您可以使用以下转换:
[
{
"operation": "shift",
"spec": {
"ms": {
"*": {
"ts": "&",
"ls": {
// "@0": {
"*:*": {
"$(0,1)": "nrs",
"$(0,2)": "names",
"*": {
"$": "paramnames[&4]",
"@": "values[&4]"
}
}
// }
},
"ss": {
"*:*": {
"*": "act"
}
}
}
}
}
}
]