问题描述
这是此示例的数据:
[
{
"date": "25-09-20","nbrMembers": 1,"nbrWallets": 4
},{
"date": "26-09-20","nbrMembers": 3,"nbrWallets": 1
},{
"date": "27-09-20","nbrMembers": 0,"nbrWallets": 2
},{
"date": "28-09-20","nbrMembers": 7,"nbrWallets": 3
}
]
我需要使用累积字段来转换json。 这是预期的结果:
[
{
"date": "25-09-20","nbrMembers": 4,"nbrWallets": 5
},"nbrWallets": 7
},"nbrMembers": 11,"nbrWallets": 10
}
]
这就是我要累计的一个字段:
jq 'foreach .[] as $row (0; . + $row.nbrMembers ; . as $x | $row | (.nbrMembers = $x))' test.json
我只是不知道如何使用多个字段?
解决方法
您可以使用整个对象,而不仅仅是字段作为 foreach 中的当前元素。
jq '[foreach .[] as $row ({nbrMembers: 0,nbrWallets: 0}; {nbrMembers: ($row.nbrMembers + .nbrMembers),nbrWallets: ($row.nbrWallets + .nbrWallets) }; . as $x | $row | .nbrMembers = $x.nbrMembers | .nbrWallets = $x.nbrWallets) ]' test.json
,
它是短一些的版本。我们可以使用$row * .
合并结果)
jq '[foreach .[] as $row (
{nbrMembers: 0,nbrWallets: 0};
{
nbrMembers: ($row.nbrMembers + .nbrMembers),nbrWallets: ($row.nbrWallets + .nbrWallets)
};
$row * .
)]' test.json
,
简洁地:
jq '[ foreach .[] as $row (null;
.nbrMembers += $row.nbrMembers
| .nbrWallets += $row.nbrWallets;
$row + . ) ]
' test.json