如何使用JQ实现字符串数值二维数组元素相乘、生成新数组并求和
jq实现二维数组数值乘算与求和方案
输入结构说明
现有输入JSON中pricexquant字段为二维数组,每个子数组包含2个字符串格式的数值,样例如下:
{ "pricexquant": [ [ "20233.54000000", "0.00877000" ], [ "20233.39000000", "0.00999000" ] ] }
需求拆解
- 遍历每个子数组,将两个字符串转为数值后相乘,每个乘积单独封装为单元素子数组,组成新的结果数组
注:问题给出的期望输出外层用{}直接包裹数组不符合JSON语法,以下输出均为合法JSON结构 - 对所有子数组的乘积结果求和,得到最终总数值
具体命令实现
1. 生成乘积结果数组
执行以下jq命令即可得到每个乘积封装为单元素子数组的结果:
jq '.pricexquant | map([ (.[0]|tonumber) * (.[1]|tonumber) | tostring ])' 你的json文件路径
命令逻辑说明:
- 先取出
pricexquant字段的二维数组 - 用
map遍历每个子数组,分别将两个元素通过tonumber转为数字类型后相乘 - 乘积结果通过
tostring转回字符串,包裹在数组中,匹配要求的单元素子数组格式
以上命令对样例输入的输出结果为:
[ [ "177.4481458" ], [ "202.1315661" ] ]
如果需要将结果包裹在对象结构中,可以调整命令为:
jq '{result: .pricexquant | map([ (.[0]|tonumber) * (.[1]|tonumber) | tostring ])}' 你的json文件路径
2. 计算所有乘积的总和
执行以下jq命令即可直接输出所有乘积的求和结果:
jq '.pricexquant | map((.[0]|tonumber) * (.[1]|tonumber)) | add' 你的json文件路径
命令逻辑说明:
- 遍历子数组计算每个乘积后,通过
add方法对乘积一维数组的所有元素求和
以上命令对样例输入的输出结果为379.5797119。
内容的提问来源于stack exchange,提问作者divedivedive
相关产品推荐
相关产品推荐

