【发布时间】:2021-05-25 18:22:07
【问题描述】:
我想更改 JSON 文件中的值。以下是 JSON 文档的 sn-p,显示了我正在尝试遍历的结构:
{
"panels": [
{
"panels": [
{
"alert": {
"notifications": [
{
"uid": "dmRej73Gz"
}
]
}
}
]
}
]
}
我想改变什么
我想将 notifications 数组中所有 UID 的值更改为另一个值。
我尝试了以下方法,但没有成功:
猫 MyJson.json | jq -r '.panels[] |.panels[].alert | .notifications[] | .uid |="newvalue"'
{
"uid": "newvalue"
}
猫 MyJson.json | jq -r'。 | select(.panels[].panels[].alert.notifications[].uid="newvalue")'
(注意 UID 完全没有改变)
{
"panels": [
{
"panels": [
{
"alert": {
"notifications": [
{
"uid": "dmRej73Gz"
}
]
}
}
]
}
]
}
这是我真正希望看到的:
{
"panels": [
{
"panels": [
{
"alert": {
"notifications": [
{
"uid": "newvalue"
}
]
}
}
]
}
]
}
用例 我有 Grafana 仪表板,我正试图将其整合到我们的 CICD 流程中。将在 Dev 环境中创建一个仪表板,然后部署到 INT 和 PROD。
从一种环境到另一种环境的唯一变化是通知通道(不幸的是)表示为 UID。我正在调用目标 Grafana 站点并获取目标环境的通知 UID。这将用作我正在进行的 JQ 调用的参数(上面称为 newvalue)。然后将进行另一个 JQ 调用以更改仪表板 UID。然后,我将使用 Grafana API 将修改后的 JSON 发布到目标 Grafana 环境。
如果一切顺利,将使用完整的通知渠道和唯一的仪表板 UID 创建仪表板。希望那不是TMI。 :)
有什么想法吗?
【问题讨论】: