我有非常大的 json,我想使用 jq 从中提取数据总和。
我正在尝试一切可能的方法,但我认为我在这里遗漏了一些东西..
我的 Json 子集:
{"main":
{"0": {"x": {"a":1}, "y": {"number of un-used":{"count":2} , "z":2}},
"1": {"x": {"a":1}, "y": {"number of un-used":{"count":3} , "z":2}},
"2": {"x": {"a":1}, "y": {"number of un-used":{"count":4} , "z":2}},
"3": {"x": {"a":1}, "y": {"no un-used":{"z":3} , "z":2}},
"4": {"x": {"a":1}, "y": {"no un-used":{"z":3} , "z":2}}},
"no-main":
{"0": {"x": {"a":1}, "y": {"number of un-used":{"count":2} , "z":2}},
"1": {"x": {"a":1}, "y": {"number of un-used":{"count":3} , "z":2}},
"2": {"x": {"a":1}, "y": {"number of un-used":{"count":4} , "z":2}},
"3": {"x": {"a":1}, "y": {"no un-used":{"z":3} , "z":2}},
"4": {"x": {"a":1}, "y": {"no un-used":{"z":3} , "z":2}}}}
我想要“y”下的“count”-“未使用的数量”的总和。
我最成功的一个是:
cat json | jq '.[] | .[].y | .["number of un-used"] | .count'
但是结果包含很多“null”,因为“未使用的数量”并不在所有“y”字典中。
可以解决吗?
最佳答案
您可以将零添加到空值以得到...零。
jq '.[] | .[].y | ."number of un-used" | .count + 0' < input.json
这会生成您要查找的 count
值列表,其中 null
值显示 0
。将它们添加到您的总和中不应改变它。
jq
可以在其表达式中执行基本算术,但让它在内部计算总和会变得稍微复杂一些。虽然您可以定义使用 reduce
的函数,但通过在命令行中附加一些内容可能会更容易对这些值求和,如下所示:
| awk '{n+=$1}END{print n}'
当然,有无数种方法可以将数字相加,其中一些方法比其他方法更黑客。
$ { printf '%s+' $(jq '.[] | .[].y | ."number of un-used" | .count + 0' input.json); echo 0; } | bc
18
关于json - JQ - 按层次结构解析字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48205247/