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"))
这适用于搜索等于“影响”的策略。但是,它只会拉取 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"))