首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要一个可靠的方法来计算资源的nbr

问我需要一个可靠的方法来计算资源的nbr
EN

Stack Overflow用户
提问于 2019-12-02 02:53:55
回答 3查看 47关注 0票数 0

我有以下从API返回的JSON:

代码语言:javascript
复制
{
"Statement": [{
        "Sid": "Group1",
        "Resource": "arn:aws:ecs:*:777744445555:task-rendition/${aws:PrincipalTag/Service}-*:*",
        "Effect": "Allow"
    },
    {
        "Sid": "Group2",
        "Resource": [
            "arn:aws:ecs:*:777744445555:task-definition/${aws:PrincipalTag/Service}-*:*",
            "arn:aws:ecs:*:777744445555:task-petition/${aws:PrincipalTag/Service}-*:*",
            "arn:aws:ecs:*:777744445555:task-fruition/${aws:PrincipalTag/Service}-*:*"
        ],
        "Effect": "Allow"
    }

]}

当我应用这些命令时,我得到了不可靠的结果:

.Statement.Resource |长度--> 73错误的.Statement1.Resource |长度--> 3正确

第一个命令产生的数字等于该字符串中的字符数,这不是我所需要的。如何以更确定的方式实现1和3?

我的上下文是CentOS 7和JQ1.5上的bash shell脚本

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-02 03:03:35

假设Resource可以是string或array类型

代码语言:javascript
复制
.Statement[].Resource | if type == "array" then length else 1 end

将输出

代码语言:javascript
复制
1
3
票数 2
EN

Stack Overflow用户

发布于 2019-12-02 03:08:17

您可以将长度部分转换为数组,对其进行扁平化(),然后通过管道将其传递给Resource ()以获得正确数量的元素。

代码语言:javascript
复制
$ cat api_return.json | jq '[.Statement[0].Resource] | flatten | length'
1
票数 1
EN

Stack Overflow用户

发布于 2019-12-02 10:51:13

对于资源的总计数,无论它们被指定到哪里,您都可以考虑:

代码语言:javascript
复制
def sigma(s): reduce s as $x (0; .+$x);

sigma(.. | objects | select(.Resource).Resource
      | if type == "array" then length else 1 end)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59128837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档