使用 jq 将现有 JSON 的新元素添加到特定列表元素

Add new element to existing JSON to a specific list element with jq

我有一个已经存在的 json,我必须在其中向具有特定键值对的列表元素添加一个新元素。例如:

{
  "parent": {
    "child-list": [
      {
        "usecase": "first"
      },
      {
        "usecase": "second"
      },
      {
        "usecase": "third"
      }
    ]
  }
}

所以我想要这样的结果:

{
  "parent": {
    "child-list": [
      {
        "usecase": "first"
      },
      {
        "usecase": "second",
        "result": "SUCCESS"
      },
      {
        "usecase": "third"
      }
    ]
  }
}

我试过这个:

jq '.parent."child-list" | map(select(."usecase"=="second") += { "result": "SUCCESS" })' base.json

但它只打印 'child-list' 而不是整个 json。

使用 |= 而不是 |。它更新对象而不是仅仅将其作为下一个输入(就像您使用 += 而不仅仅是 + 之后一样)。

jq '.parent."child-list" |= map(select(."usecase"=="second") += { "result": "SUCCESS" })' base.json