我这样输入:
"data": [{
"id": 111585,
"name": "Inverter",
"batList": [{
"name": "Battery1",
"dataDict": [{
"key": "b1_1",
"name": "Battery V.",
"value": 57.63,
"unit": "V"
}, {
"key": "b1_2",
"name": "Battery I.",
"value": -0.10,
"unit": "A"
}, {
"key": "b1_3",
"name": "Battery P.",
"value": -6,
"unit": "W"
}, {
"key": "b1_4",
"name": "Inner T.",
"value": 25,
"unit": "℃"
}, {
"key": "b1_5",
"name": "Remaining Capacity % ",
"value": 99,
"unit": "%"
}]
}]
}],
我要从中提取“剩余容量%”的“值”属性(即99)。
我最好的业余爱好,但搜寻得很好的尝试是
jq --arg instance "Remaining Capacity % " '.data | .[] | select(.name == $instance) | .value')
但是我得到的结果是空的。对于这种嵌套的不妥协的任何帮助,将不胜感激。
答案 0 :(得分:1)
您的想法似乎正确,但是您错过了2011-09-21 08:21:22
之后的顶级路径,应该是
.data[]
答案 1 :(得分:0)
Inian答案的另一种选择是使用包含选择内容的配方,例如:
jq -r '.[].batList[].dataDict[] | select(.name|contains("Remaining")).value' file
虽然本例中没有更好的方法,但要记住这一点很方便,尤其是在需要查找一堆值(例如contains("Battery")
将返回三个结果。
答案 2 :(得分:0)
这是使用基于步行路径的Unix实用程序 jtc
的另一种方法:
bash $ <file.json jtc -w'<Remaining Capacity % >[-1][value]'
99
bash $