我有点困惑。
我已经尝试过jmespath,但没有帮助。
我需要获取一个包含指定对象的高级对象。
在下面的示例中,我们看到了有关HDD的一个事实。我需要获取包含指定分区的HDD的磁盘名称(sdf
,sdg
或dm-0
),例如sdf1
。
我有这个jmespath查询:
msg.*.[partitions.sdf1]
但是它只显示了sdf1
中的所有内容。像[?partitions=="sdf1"]
这样的过滤器在这里不起作用,
所以问题是:在我的示例中如何保留整个sdf
对象?
提前谢谢!
{
"msg": {
"sdf": {
"partitions": {
"sdf1": {
"holders": [],
"links": {
"ids": [
"17101686F123-part1",
"wwn-0x123456-part1"
]
},
"sectors": "1875380224"
}
},
"removable": "0",
"rotational": "0"
},
"sdg": {
"partitions": {
"sdg1": {
"holders": [],
"links": {
"ids": [
"164414123CEB-part1",
"wwn-0x1233451234831ceb-part1"
]
},
"uuid": "F301-FA7F"
}
},
"removable": "0"
},
"dm-0": {
"holders": [],
"host": "",
"links": {
"ids": [],
"uuids": []
},
"vendor": null,
"virtual": 1
}
}
}
答案 0 :(得分:0)
这应该有效:
msg.*.{value: @, condition: partitions.sdf1}[?condition].value
首先,我们为每个HDD对象创建一个临时对象:{value, condition}
。如果在相应的HDD(condition
,null
partitions.sdf1
)对象上不存在sdf
,则sdg
将是dm-0
。如果partitions.sdf1
存在,则condition
将包含该对象,即:
"condition": {
"holders": [],
"links": {
"ids": [
"17101686F123-part1",
"wwn-0x123456-part1"
]
},
"sectors": "1875380224"
}
使用[?condition]
过滤掉condition
为null
的所有对象。最后,我们使用.value