使用两个数组编辑JSON.希望在每个数组中的同一位置进行编辑



我有一个json,看起来像:

{
"AlertDestinationAssociations": [
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": "SNMPv3Trap",
"SecurityName": "oneview_4861333356c624b597366648345"
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
}
],
"AlertDestinations": [
null,
"1.2.3.4",
null,
null,
null,
null,
null,
null
]
}

我想编辑第一个空SNMPAlertProtocol和SecurityName。然后,我需要编辑AlertDestinations中相应的数组元素。作为第一步,我可以使用

更改所有空值:
.AlertDestinationAssociations[] | select(.SNMPAlertProtocol == null).SNMPAlertProtocol |= "SNMPv3Trap" | .SecurityName |= "crap"

,但我还没有弄清楚如何将其限制为第一个空元素,也没有如何编辑AlertDestinations数组中的相应元素。有人有什么建议吗?

使用jq
jq --argjson pos 0 '
.AlertDestinationAssociations[$pos] |= {SNMPAlertProtocol: "SNMPv3Trap", SecurityName: "crap"} |
.AlertDestinations[$pos] |= "10.1.2.3"
' file.json

{
"AlertDestinationAssociations": [
{
"SNMPAlertProtocol": "SNMPv3Trap",
"SecurityName": "crap"
},
{
"SNMPAlertProtocol": "SNMPv3Trap",
"SecurityName": "oneview_4861333356c624b597366648345"
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
},
{
"SNMPAlertProtocol": null,
"SecurityName": null
}
],
"AlertDestinations": [
"10.1.2.3",
"1.2.3.4",
null,
null,
null,
null,
null,
null
]
}

最新更新