jq select,但保留 parent objects

jq select, but preserve parent objects

这适用于搜索等于“影响”的策略。但是,它只会拉取 objects 本身。 jq '.techniques[] | select(.tactic == "impact")'

有没有办法在 json 中使用 select 和类似 jq '. | select(.techniques[].tactic == "impact")' 的东西?我猜问题是类似的东西,即使它有效,仍然没有明确说要保留以前的项目。

手动重建 parent 是不可行的。

输入

{
  "viewMode": 0,
  "hideDisabled": false,
  "techniques": [
    {
      "name": "john",
      "tactic": "reconnaissance"
    },
    {
      "name": "jane",
      "tactic": "impact"
    },
    {
      "name": "jill",
      "tactic": "execution"
    }
  ],
  "karma": "yes"
}

期望的输出

{
  "viewMode": 0,
  "hideDisabled": false,
  "techniques": [
    {
      "name": "jane",
      "tactic": "impact"
    }
  ],
  "karma": "yes"
}

如果这是补救性的以至于不需要回应,我会弄清楚并更新。这似乎是最基本的东西。我也会做一个 !=,它也可以正常工作,但不会捕获整个 body.

我试过使用变量来做到这一点,这让我很接近;

jq  '{techniques: [.techniques[] | select(.tactic == "impact")]} as $a| $a'  test.json

但是,尝试向该数组添加关键“技术”会破坏我使用它的能力;

jq  '{techniques: [.techniques[] | select(.tactic == "impact")]} as $a| $a + [.]'  test.json
jq: error (at test.json:19): object ({"technique...) and array ([{"viewMode...) cannot be added

|= 是你的朋友,例如

.techniques |= map(select(.tactic == "impact"))