gpt4 book ai didi

json - 在带有 Jmespath 的多选哈希中使用来自 json src 文档的键

转载 作者:行者123 更新时间:2023-12-01 04:48:50 24 4
gpt4 key购买 nike

我有一个看起来像这样的源 json 文档:

# Source json
{
"nics": {
"vlan_internal": {
"mac": "aa:aa:aa:aa:aa:aa"
},
"vlan_external": {
"mac": "aa:aa:aa:aa:aa:bb"
}
}
}

使用 ansible json_query过滤器(使用jmespath),我想操作上面的json,使输出的json文档看起来像这样:
# Desired output json
{
"vlan_internal": "aa:aa:aa:aa:aa:aa",
"vlan_external": "aa:aa:aa:aa:aa:ab"
}

似乎我应该使用某种多选散列,但我找不到将 vlan 名称(它们是源 json 文档中的散列键,而不是散列值)放入输出 json 文档的好方法。

我不会提前知道 vlan 的名称,所以我不能硬编码 vlan_internalvlan_external进入 jmespath 表达式。

我最接近的是这个 jmespath 表达式:
nics.{ vlans: keys(@), macs: *.mac }

这会产生一个几乎有用的输出 json 文档:
{
"vlans": [
"vlan_internal",
"vlan_external"
],
"macs": [
"aa:aa:aa:aa:aa:aa",
"aa:aa:aa:aa:aa:bb"
]
}

如果保证 vlan 名称列表的顺序和 mac 地址列表的顺序与源 json 文档的顺序相同,这对我有用。但是 jmespath 规范非常清楚地表明 keys()函数不需要以任何特定顺序返回结果。由于我需要将 vlan 名称与正确的 mac 地址配对,这对我不起作用。

有人知道用 jmespath 实现这一目标的方法吗?

最佳答案

仅使用 JMESPath 您可以使用此查询:
@.nics | {vlan_internal: @.vlan_internal | values(@)[0], vlan_external: @.vlan_external | values(@)[0]}
有了这个你的源 JSON,你会得到:

{
"vlan_internal": "aa:aa:aa:aa:aa:aa",
"vlan_external": "aa:aa:aa:aa:aa:bb"
}

关于json - 在带有 Jmespath 的多选哈希中使用来自 json src 文档的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com