Используйте jq, чтобы получить родительский ключ для выбранного объекта - PullRequest
1 голос
/ 07 ноября 2019

Я задал вопрос о получении ключа и значения из структуры JSON: Использование jq для получения ключа и значения из JSON

Это JSON:

{
 "63": {
    "state": {
      "on": false,
      "alert": "select",
      "mode": "automation",
      "reachable": true
    },
    "swupdate": {
      "state": "notupdatable",
      "lastinstall": "2019-09-15T11:19:15"
    },
    "type": "plug",
    "name": "Tree",
    "modelid": "XXX",
    "manufacturername": "XXX",
    "productname": "plug",
    "capabilities": {
      "certified": false,
      "control": {},
      "streaming": {
        "renderer": false,
        "proxy": false
      }
    },
    "config": {
      "archetype": "plug",
      "function": "functional",
      "direction": "omnidirectional"
    },
    "uniqueid": "00:0d:6f:ff:fe:da:c9:dc-01",
    "swversion": "2.0.022"
  }
}

Я хочу выдать только родительский ключ для объекта на основе содержимого .name: где .name == "Tree", вернуть "63".

Я могу выдать весь объект с помощью:

jq -r '.[] | select(.name == "Tree")'

или список ключа и имени с:

jq -r 'map_values(.name)'

1 Ответ

3 голосов
/ 07 ноября 2019

Вы можете отформатировать JSON в формате ключ / значение, используя to_entries() и получить ключ, соответствующий определенному значению

jq --raw-output 'to_entries[] | select(.value.name == "Tree").key'
...