【问题标题】:How do I update a single value in a nested array of objects in a json document using jq?如何使用 jq 更新 json 文档中嵌套对象数组中的单个值?
【发布时间】:2017-08-18 03:10:07
【问题描述】:

我有一个如下所示的 JSON 文档。请注意,这是真实 JSON 的简化示例,包含在问题的底部:

{
  "some_array": [
    {
      "k1": "A",
      "k2": "XXX"
    },
    {
      "k1": "B",
      "k2": "YYY"
    }
  ]
}

我想更改some_array 数组中所有k2 键的值,其中k1 键的值为“B”。

这可以使用 jq 吗?

作为参考,这是实际的 JSON 文档,它是用于postman / newman 工具的环境变量文件。我正在尝试使用 JQ 进行此转换,因为该工具尚不支持 command line overrides of specific environment variables

实际的 JSON

{
  "name": "Local-Stack-Env-Config",
  "values": [
    {
      "enabled": true,
      "key": "KC_master_host",
      "type": "text",
      "value": "http://localhost:8087"
    },
    {
      "enabled": true,
      "key": "KC_user_guid",
      "type": "text",
      "value": "11111111-1111-1111-1111-11111111111"
    }
  ],
  "timestamp": 1502768145037,
  "_postman_variable_scope": "environment",
  "_postman_exported_at": "2017-08-15T03:36:41.474Z",
  "_postman_exported_using": "Postman/5.1.3"
}

【问题讨论】:

    标签: json edit jq in-place


    【解决方案1】:

    这里是zayquan的过滤器的一个稍微简单的版本:

    .some_array |= map(if .k1=="B" then .k2="changed" else . end)
    

    【讨论】:

      【解决方案2】:

      这是一个可行的解决方案:

      cat some.json | jq '.some_array = (.some_array | map(if .k1 == "B" then . + {"k2":"changed"} else . end))'
      

      产生输出:

        "some_array": [
          {
            "k1": "A",
            "k2": "XXX"
          },
          {
            "k1": "B",
            "k2": "changed"
          }
        ]
      }
      

      【讨论】:

        【解决方案3】:

        这是另一个解决方案。

        jq '(.some_array[] | select(.k1 == "B") | .k2) |= "new_value"'
        

        输出

        {
          "some_array": [
            {
              "k1": "A",
              "k2": "XXX"
            },
            {
              "k1": "B",
              "k2": "new_value"
            }
          ]
        }
        

        【讨论】:

          猜你喜欢
          • 2015-09-11
          • 2012-05-18
          • 1970-01-01
          • 2016-04-14
          • 2020-03-01
          • 1970-01-01
          • 2020-12-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多