首页 > 解决方案 > 使用 JQ 将新字段插入特定对象

问题描述

我有一个如下所示的 JSON 文件:

{
  "BackupPlanName": "backup-plan",
  "Rules": [
    {
      "RuleName": "rule1",
      "Lifecycle": {
        "DeleteAfterDays": 35
      },
      "RuleId": "3e5ae513"
    },
    {
      "RuleName": "rule2",
      "Lifecycle": {
        "DeleteAfterDays": 365
      },
      "RuleId": "82c660c9"
    }
  ]
}

只需要将此键/值添加到 rule1

"EnableContinuousBackup": true

如果我使用以下命令,我也会将它添加到每个对象:

jq '.Rules[].EnableContinuousBackup += true'

有了这个,它不会让我得到完整的 JSON:

jq '.Rules[] | select(.RuleName=="rule1") | .EnableContinuousBackup += true'

那么,我怎样才能让它工作,让我的 json 最终看起来像这样呢?

{
  "BackupPlanName": "backup-plan",
  "Rules": [
    {
      "RuleName": "rule1",
      "Lifecycle": {
        "DeleteAfterDays": 35
      },
      "RuleId": "3e5ae513",
      "EnableContinuousBackup": true
    },
    {
      "RuleName": "rule2",
      "Lifecycle": {
        "DeleteAfterDays": 365
      },
      "RuleId": "82c660c9",
    }
  ]
}

标签: jsonjq

解决方案


=您需要将赋值运算符 ( , not )的右侧括+=在括号中。

(.Rules[] | select(.RuleName == "rule1") .EnableContinuousBackup) = true

在线演示


推荐阅读