在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
答案 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函数的“标准库”的理想选择。