编辑:在评论中澄清后,要检索密钥以“dimmer”开头的设备的状态,请使用
jq '[ .devices | to_entries[] | select(.key | startswith("dimmer")) | .value = .value.state ] | from_entries' filename.json
输出:
{
"dimmer1": "off",
"dimmer2": "off"
}
这工作如下:
.devices
选择.devices
JSON 对象的属性
to_entries
将对象分解成描述其属性(设备)的键值对数组,也就是说,一个属性"foo": "bar"
变成一个对象{ "key": "foo", "value": "bar" }
,分解后的对象被扩展成一个这样的对象数组(每个属性一个)
to_entries[]
解压该数组,以便通过管道传输它
select(.key | startswith("dimmer"))
,它选择那些密钥以开头的设备dimmer
.value = .value.state
重构描述设备的键值对,以便仅将值替换为其state
属性
[ all that ]
制作所有这些的 JSON 数组,并且
[ all that ] | from_entries
将键值对数组转换回 JSON 对象。
旧答案(缩短),现已过时但可能感兴趣:
要检索devices
数组中属性的键:
jq '.devices | keys' filename.json
要检索值(也在数组中),
jq '[ .devices[] ]' filename.json
我不完全确定你指的是这两个中的哪一个。