我有一个 JSON 格式的有效负载,其中包含嵌套数组,我想将其修改为更简单的数组。输入看起来像这样:
[
{
"pim_network": [
{
"addresses": [
{
"ifindex": 1,
"ifname": "lo",
"address": "00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00",
"addr_info": [
{
"family": "inet",
"local": "127.0.0.1",
"prefixlen": 8,
"label": "lo"
},
{
"family": "inet6",
"local": "::1",
"prefixlen": 128
}
]
},
{
"ifindex": 2,
"ifname": "ens33",
"address": "00:0c:29:02:b8:cd",
"broadcast": "ff:ff:ff:ff:ff:ff",
"addr_info": [
{
"family": "inet",
"local": "192.168.119.129",
"prefixlen": 24,
"broadcast": "192.168.119.255",
"label": "ens33"
},
{
"family": "inet6",
"local": "fe80::20c:29ff:fe02:b8cd",
"prefixlen": 64
}
]
},
{
"ifindex": 3,
"ifname": "docker0",
"address": "02:42:36:ae:50:55",
"broadcast": "ff:ff:ff:ff:ff:ff",
"addr_info": [
{
"family": "inet",
"local": "172.17.0.1",
"prefixlen": 16,
"broadcast": "172.17.255.255",
"label": "docker0"
}
]
}
]
}
]
}
]
所需的输出是(某些键:值对对于 ipv4 和 ipv6 数据的同一 MAC 地址使用两次):
[
{
"pim_network": [
{
"ifindex": 1,
"ifname": "lo",
"address": "00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00",
"family": "inet",
"local": "127.0.0.1",
"prefixlen": 8,
"label": "lo"
},
{
"ifindex": 1,
"ifname": "lo",
"address": "00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00",
"family": "inet6",
"local": "::1",
"prefixlen": 128
},
{
"ifindex": 2,
"ifname": "ens33",
"address": "00:0c:29:02:b8:cd",
"broadcast": "192.168.119.255",
"family": "inet",
"local": "192.168.119.129",
"prefixlen": 24,
"label": "ens33"
},
{
"ifindex": 2,
"ifname": "ens33",
"address": "00:0c:29:02:b8:cd",
"broadcast": "ff:ff:ff:ff:ff:ff",
"family": "inet6",
"local": "fe80::20c:29ff:fe02:b8cd",
"prefixlen": 64
},
{
"ifindex": 3,
"ifname": "docker0",
"address": "02:42:36:ae:50:55",
"broadcast": "172.17.255.255",
"family": "inet",
"local": "172.17.0.1",
"prefixlen": 16,
"label": "docker0"
}
]
}
]
到目前为止(不起作用)规格:
[
{
"operation": "shift",
"spec": {
"*": {
"*": "&",
"pim_network": {
"*": {
"addresses": {
"*": {
"address": "pim_network.[&1].address",
"addr_info": {
"*": {
"local": "pim_network.[&1].address.local"
}
}
}
}
}
}
}
}
}
]
但随后我们得到这样的输出:
{
"pim_network": [
{
"address": "00:00:00:00:00:00"
},
{
"address": [
{
"local": "::1"
},
"00:0c:29:02:b8:cd"
]
},
{
"address": "02:42:36:ae:50:55"
}
]
}
我们一直在努力寻找有关在 JOLT 转换中使用 &(和其他查找函数)的易于理解的文档,但我们发现的大多数网站都过于抽象或假设对 JOLT 有更深入的了解。如果有人知道有好的教程或在线课程的好网站,请告诉我。我和我的同事都是高级脚本编写者,但这似乎不足以轻松掌握 JOLT 的复杂性。