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

Вот один (из множества предварительно проверенных) JSON-объект, возвращаемый curl <url> | jq '.'

{
 "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"
  }
}

Я хочу передать вывод в jq, чтобы я мог вернуть ключ и имя из каждого объектаНапример, «63» «Дерево» (меня не интересует, указан ли результат в скобках, или как разделены поля, или указано «name»:).

Я могу получить ключи: curl <url> | jq -r 'keys[]'

и имена: curl <url> \ jq -r '.[]{"name"}

, но я не могу получить их обоих в одной строке.

1 Ответ

1 голос
/ 07 октября 2019

Сокращенное, эффективное и, можно сказать, элегантное решение:

map_values(.name)

Одна из многих альтернатив:

with_entries( {key, value: .value.name} )

Если вы хотите, чтобы все в одной строке, вы могли быиспользуйте параметр командной строки -c.

...