JQ的多语句:累加多个字段
Multiple statements with JQ: Cumulate multiple fields
这是我在这个例子中的数据:
[
{
"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": 1,
"nbrWallets": 4
},
{
"date": "26-09-20",
"nbrMembers": 4,
"nbrWallets": 5
},
{
"date": "27-09-20",
"nbrMembers": 4,
"nbrWallets": 7
},
{
"date": "28-09-20",
"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
这是我在这个例子中的数据:
[
{
"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": 1,
"nbrWallets": 4
},
{
"date": "26-09-20",
"nbrMembers": 4,
"nbrWallets": 5
},
{
"date": "27-09-20",
"nbrMembers": 4,
"nbrWallets": 7
},
{
"date": "28-09-20",
"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