需要帮助将对象数组简化为一个总和

时间:2019-11-18 15:11:47

标签: shell jq

在shell脚本中,我有下面的对象数组:

response={
        "product": "BIG MAC",
        "objects": [
                        {
                            "qty": 10,
                            "size": 32
                        },
                        {
                            "qty": 20,
                            "size": 53
                        },
                        {
                            "qty": 10,
                            "size": 54
                        }
        ]
    }

我正在编写一个jq函数以获取总量。

data=$( echo $response | jq '.objects[] | .qty ' )

这给了我一行数量,例如

10 20 10

我如何总结这些以获取价值:

40

2 个答案:

答案 0 :(得分:3)

创建一个数组并通过add传递管道:

jq '[.objects[] | .qty] | add'

使用map可能会更简单,因为您不必先为“ .objects”建立索引:

jq '.objects | map(.qty) | add'

答案 1 :(得分:1)

使用面向流的加法函数可产生避免构造数组效率低下的解决方案:

def sigma(s): reduce s as $x (0; .+$x);

sigma(.objects[] | .qty)
此处定义的

sigma是jq函数的“标准库”的理想选择。