如何使用 jq 更新 json 文档中嵌套对象数组中的单个值?

zay*_*uan 6 json edit in-place jq

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

{
  "some_array": [
    {
      "k1": "A",
      "k2": "XXX"
    },
    {
      "k1": "B",
      "k2": "YYY"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

使用 jq 可以吗?

作为参考,这是实际的 JSON 文档,它是用于postman / newman工具的环境变量文件。我正在尝试使用 JQ 进行此转换,因为该工具尚不支持特定环境变量的命令行覆盖

实际 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"
}
Run Code Online (Sandbox Code Playgroud)

jq1*_*727 6

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

.some_array |= map(if .k1=="B" then .k2="changed" else . end)
Run Code Online (Sandbox Code Playgroud)