【问题标题】:jq select, but preserve parent objectsjq 选择,但保留父对象
【发布时间】:2021-03-30 15:56:51
【问题描述】:

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

在使用jq '. | select(.techniques[].tactic == "impact")' 之类的json 遍历时,是否无法使用select?我猜问题是这样的事情,即使它有效,仍然没有明确说要保留以前的项目。

手动重建父级是不可行的。

输入

{
  "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"
}

如果这是一种补救措施,以至于无法得到回应,我会弄清楚并更新。这似乎是最基本的东西。我还会做一个 !=,它也可以正常工作,但不会捕获整个身体。

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

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

【问题讨论】:

    标签: json select jq edit


    【解决方案1】:

    |= 是你的朋友,例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2015-06-13
      相关资源
      最近更新 更多