使用jq从JSON获取键和值

时间:2019-10-07 11:42:40

标签: json bash jq

这是curl <url> | jq '.'

返回的单个(许多经过修饰的)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"
  }
}

我想将输出传递到jq,以便可以从每个对象返回键和名称,例如“ 63”“树”(我不担心结果是否在括号中,如何分隔字段或是否包括“ name”:)

我可以获得钥匙: curl <url> | jq -r 'keys[]'

和名称: curl <url> \ jq -r '.[]{"name"}

但我不能将它们放在同一行。

1 个答案:

答案 0 :(得分:1)

简洁高效的解决方案:

map_values(.name)

众多选择之一:

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

如果您希望所有内容都在一行上,则可以使用-c命令行选项。