在任何级别使用 jq 搜索字符串



我想使用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"
        }
      }
    ]
  }
}

相关内容

  • 没有找到相关文章

最新更新