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