我有非常大的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”和“numberofunused”。
我最成功的是:
cat json | jq '.[] | .[].y | .["number of un-used"] | .count'
但结果包含了很多“空”,因为“未使用的数量”不在所有“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/