我知道有很多类似的解决方案,但没有人能比得上我的情况。我有个json:
{
"page": 1,
"per_page": 20,
"total": 3,
"saved_objects": [
{
"type": "dashboard",
"id": "f3ea5f20-e773-11ea-8cae-c1046c8b1215"
},
{
"type": "dashboard",
"id": "5c071f30-e797-11ea-8cae-c1046c8b1215"
},
{
"type": "dashboard",
"id": "644a15c0-e79d-11ea-8cae-c1046c8b1215"
}
]
}
如果id == "f3ea5f20-e773-11ea-8cae-c1046c8b1215“或id == "5c071f30-e797-11ea-8cae-c1046c8b1215”,那么输出应该是:
{
"page": 1,
"per_page": 20,
"total": 3,
"saved_objects": [
{
"type": "dashboard",
"id": "644a15c0-e79d-11ea-8cae-c1046c8b1215"
}
]
}
我试过:
jq 'select(.saved_objects[].id != "f3ea5f20-e773-11ea-8cae-c1046c8b1215" and .saved_objects[].id != "5c071f30-e797-11ea-8cae-c1046c8b1215")'
也有很多不同的地方,但都没有用。我做错了什么?
谢谢你的帮助。
发布于 2020-08-31 14:16:28
你们关系很好。
jq '.saved_objects=(
.saved_objects[] |
select (.id != "f3ea5f20-e773-11ea-8cae-c1046c8b1215"
and .id != "5c071f30-e797-11ea-8cae-c1046c8b1215"))
' file.json
发布于 2020-08-31 20:29:56
如果黑名单相当长或应作为参数传递,则应注意以下方法:
["f3ea5f20-e773-11ea-8cae-c1046c8b1215", "5c071f30-e797-11ea-8cae-c1046c8b1215"] as $blacklist
| .saved_objects |= map(select(.id | IN($blacklist[]) | not))
或者更简洁地说:
["f3ea5f20-e773-11ea-8cae-c1046c8b1215", "5c071f30-e797-11ea-8cae-c1046c8b1215"] as $blacklist
| del(.saved_objects[] | select(.id | IN($blacklist[])))
还请注意在上面的第一种方法中使用|=
。
发布于 2020-08-31 21:29:20
我还想发布一个基于不同方法(jtc
)的解决方案,只是为了了解另一种方法:
。
bash $ <file.json jtc -pw'<f3ea5f20-e773-11ea-8cae-c1046c8b1215>[-1]' -w'<5c071f30-e797-11ea-8cae-c1046c8b1215>[-1]'
{
"page": 1,
"per_page": 20,
"saved_objects": [
{
"id": "644a15c0-e79d-11ea-8cae-c1046c8b1215",
"type": "dashboard"
}
],
"total": 3
}
bash $
bash $ ids='["5c071f30-e797-11ea-8cae-c1046c8b1215","f3ea5f20-e773-11ea-8cae-c1046c8b1215"]'
bash $ <file.json jtc -pw'[id]:<I>P:[-1]' -u"$ids" -u'<I>s'
{
"page": 1,
"per_page": 20,
"saved_objects": [
{
"id": "644a15c0-e79d-11ea-8cae-c1046c8b1215",
"type": "dashboard"
}
],
"total": 3
}
bash $
如果需要将更新直接放入源文件(a.k.a就地更新),则使用选项-f
,如:jtc -pw'[id]:<I>P:[-1]' -u$ids -u'<I>s' -f file.json
PS。碰巧我也是jtc
unix工具的开发人员。
https://stackoverflow.com/questions/63672380
复制相似问题