我有一个来自HPE OneView的JSON输出。一个简短的例子是:
{
"uri": "/rest/server-hardware/*/firmware?start=0&count=32",
"total": 102,
"start": 0,
"prevPageUri": null,
"type": "sever-firmwareinventory-list-1",
"category": "server-hardware",
"count": 32,
"members": [
{
"uri": "/rest/server-hardware/37383638-5A43-3338-313356585742/firmware",
"type": "server-hardware-firmware-1",
"category": "server-hardware",
"serverHardwareUri": "/rest/server-hardware/37383638-5A43-3338-313356585742",
"serverName": "bb-r2-n12-ilo",
"serverModel": "Proliant DL380 Gen10",
"components": [
{
"componentVersion": "4.0.4.288",
"componentLocation": "System Board",
"componentName": "Server Platform Services (SPS) Firmware",
"componentKey": "b34e5677-21dc-45d3-872b-42f76fee9053"
},
{
"componentVersion": "U30 v1.46 (10/02/2018)",
"componentLocation": "System Board",
"componentName": "System ROM",
"componentKey": "aa148d2e-6e09-453e-bc6f-62baa5f5ccc4"
}
],
"created": "2020-07-26T22:01:54.679Z"
},
{
"uri": "/rest/server-hardware/37383638-5A43-3338-313052304C4A/firmware",
"type": "server-hardware-firmware-1",
"category": "server-hardware",
"serverHardwareUri": "/rest/server-hardware/37383638-5A43-3338-313052304C4A",
"serverName": "bb-r5-n10-ilo",
"serverModel": "Proliant DL380 Gen10",
"components": [
{
"componentVersion": "4.1.4.296",
"componentLocation": "System Board",
"componentName": "Server Platform Services (SPS) Firmware",
"componentKey": "b34e5677-21dc-45d3-872b-42f76fee9053"
},
{
"componentVersion": "U30 v1.36 (02/15/2018)",
"componentLocation": "System Board",
"componentName": "System ROM",
"componentKey": null
}
],
"created": "2020-07-26T22:01:54.679Z"
},
{
"uri": "/rest/server-hardware/37313438-3033-5A43-3338-30384D533730/firmware",
"type": "server-hardware-firmware-1",
"category": "server-hardware",
"serverHardwareUri": "/rest/server-hardware/37313438-3033-5A43-3338-30384D533730",
"serverName": "bb-r3-n1-ilo",
"serverModel": "Proliant DL560 Gen10",
"components": [
{
"componentVersion": "4.1.4.296",
"componentLocation": "System Board",
"componentName": "Server Platform Services (SPS) Firmware",
"componentKey": "b34e5677-21dc-45d3-872b-42f76fee9053"
},
{
"componentVersion": "U34 v2.10 (05/21/2019)",
"componentLocation": "System Board",
"componentName": "System ROM",
"componentKey": "aa148d2e-6e08-453e-bc6f-63baa5f5ccc4"
}
],
"created": "2020-07-26T22:01:54.679Z"
}
],
"modified": "2020-07-27T09:30:55.882Z",
"nextPageUri": null
}
我知道我可以使用jq -r '.members[] | select(.serverModel == "Proliant DL380 Gen10") | .components[] | select(.componentName == "System ROM") |.componentVersion' firmware
来检索DL380 Gen 10s的系统ROM版本,但是我还想将serverName和系统ROM版本一起打印。我正在尝试的所有操作都给出了错误。有人知道怎么做吗?
答案 0 :(得分:1)
构建字符串是一个好技巧。如果有帮助,您还可以构建中间对象,以使事物以更易于理解的形式显示。例如
$ cat stuff.jq
.members[]
| select(.serverModel == "Proliant DL380 Gen10")
| {
name: .serverName,
rom: ( .components[] | select(.componentName == "System ROM") | .componentVersion )
}
| "The ROM version for \(.name) is \(.rom)"
这将提供以下输出:
$ jq -rf stuff.jq firmware.json
The ROM version for bb-r2-n12-ilo is U30 v1.46 (10/02/2018)
The ROM version for bb-r5-n10-ilo is U30 v1.36 (02/15/2018)
$