如何在嵌套JSON中选择具有jq的元素
我的意见如下:如何在嵌套JSON中选择具有jq的元素,json,jq,Json,Jq,我的意见如下: "data": [{ "id": 111585, "name": "Inverter", "batList": [{ "name": "Battery1", "dataDict": [{ "key": "b1_1", "name": "Battery V.", "value": 57.63,
"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": "%"
}]
}]
}],
我想从中提取“value”属性,即剩余容量的99%
我最好的业余但搜索得很好的尝试是
jq --arg instance "Remaining Capacity % " '.data | .[] | select(.name == $instance) | .value')
但是我得到了一个空的结果。如果您对这种嵌套的不妥协有任何帮助,我们将不胜感激。您的想法似乎是正确的,但您没有提到.data[]之后的顶级路径,应该是
jq --arg instance "Remaining Capacity % " \
'.data[].batList[].dataDict[] | select(.name == $instance ).value' json
Inian回答的另一种方法是使用“选择包含”配方,例如:
jq -r '.[].batList[].dataDict[] | select(.name|contains("Remaining")).value' file
虽然在本例中没有更好的方法,但是记住它非常方便,特别是当您需要查找一组值时,例如containsBattery将返回三个结果 工作!我一定试过你解决方案的每一个组合,除了正确的。我得到了jq:error,在我尝试batList[]等时,无法使用字符串索引数组。。谢谢你的及时帮助。