Получить значение @ odata.id с помощью jq в выводе Redfi sh - PullRequest
1 голос
/ 29 января 2020

Я анализирую некоторые json Redfi sh данные, используя jq.

Попытка получить значение для @ odata.id из файла redfi sh .txt ниже.

Вызов с рекомендуемым jq. ["@ Odata.id"], похоже, не совсем работать, чтобы вытащить только само значение, которое: / redfish / v1 / Systems

Любые предложения приветствуются. Вывод ниже ...:)

Спасибо, Ник

root@ubuntu-xenial:/var/opt# cat redfish.txt
{"@odata.context":"/redfish/v1/$metadata#ServiceRoot.ServiceRoot","@odata.id":"/redfish/v1","@odata.type":"#ServiceRoot.v1_2_0.ServiceRoot","AccountService":{"@odata.id":"/redfish/v1/Managers/iDRAC.Embedded.1/AccountService"},"Chassis":{"@odata.id":"/redfish/v1/Chassis"},"Description":"Root Service","EventService":{"@odata.id":"/redfish/v1/EventService"},"Id":"RootService","JsonSchemas":{"@odata.id":"/redfish/v1/JSONSchemas"},"Links":{"Sessions":{"@odata.id":"/redfish/v1/Sessions"}},"Managers":{"@odata.id":"/redfish/v1/Managers"},"Name":"Root Service","Oem":{"Dell":{"@odata.type":"#DellServiceRoot.v1_0_0.ServiceRootSummary","IsBranded":0,"ManagerMACAddress":"d0:96:69:51:d4:70","ServiceTag":"XXXX"}},"RedfishVersion":"1.2.0","Registries":{"@odata.id":"/redfish/v1/Registries"},"SessionService":{"@odata.id":"/redfish/v1/SessionService"},"Systems":{"@odata.id":"/redfish/v1/Systems"},"Tasks":{"@odata.id":"/redfish/v1/TaskService"},"UpdateService":{"@odata.id":"/redfish/v1/UpdateService"}}
root@ubuntu-xenial:/var/opt# cat redfish.txt | jq .Systems
{
  "@odata.id": "/redfish/v1/Systems"
}
root@ubuntu-xenial:/var/opt# cat redfish.txt | jq .Systems | jq .@odata.id
jq: error: syntax error, unexpected FIELD, expecting QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.@odata.id
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.@odata.id
jq: 2 compile errors
root@ubuntu-xenial:/var/opt# cat redfish.txt | jq .Systems | jq .["@odata.id"]
{
  "@odata.id": "/redfish/v1/Systems"
}
"/redfish/v1/Systems"
root@ubuntu-xenial:/var/opt# cat redfish.txt | jq .Systems | jq .["odata.id"]
{
  "@odata.id": "/redfish/v1/Systems"
}
"/redfish/v1/Systems"
root@ubuntu-xenial:/var/opt#

1 Ответ

0 голосов
/ 29 января 2020

Вы можете просто использовать фильтр:

.Systems["@odata.id"]

То есть, в bash или bash -подобном приглашении вы наберете что-то вроде:

jq '.Systems["@odata.id"]' redfish.txt
...