我想使用jq
来提取 JSON 文件中键Action
的任何外观。 Action
在不同路径(或具有不同值的相同路径键结构)中的 JSON 中多次出现。
使用案例是提取授予*
权限的所有 IAM 策略。
我想选择以下情况。Action 是值 "*" 或者是一个以 "*"
作为元素的数组,例如
"Action":["not this", "*", "not that"]
另外,最好包含包含上述某些级别的"Action"
的 JSON 片段。
例如这个 JSON :
{
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
}
}
]
},
...
它将被提取
{
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
}
}
]
},
...
}
这可以通过jq
实现吗,以及如何实现?
获取满足条件的路径和对象
[本节按原始措辞处理问题,即当问题具体询问指向感兴趣对象的路径时。
paths(objects and has("Action")
and (.Action == "*" or (.Action|index("*")))) as $path
| [ $path, getpath($path)]
根据选择标准折叠输入
. as $in
| reduce paths(objects and has("Action")
and (.Action == "*" or (.Action|index("*")))) as $path
({}; setpath($path; $in | getpath($path)))
给定类似于 Q 中显示的输入,上面的过滤器将产生:
{
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
}
}
]
}
}