如何解决如果键具有动态值,如何用jq过滤json
我有json:
{
"error": 0,"descErr": "Ok","seqNumber": 0,"data": {
"events": [],"devices": {
"aaa1234a": {
"deviceType": "aaa","ip": "192.168.1.4","otherInformation": "blabla4"
},"aaa1235a": {
"deviceType": "aaa","ip": "192.168.1.5","otherInformation": "blabla5"
},"aaa1236a": {
"deviceType": "aaa","ip": "192.168.1.6","otherInformation": "blabla6"
}
}
}
}
,只想使用 jq 获得设备名称(进入aaa1234a的json格式的json),ip
和otherInformation
。
我需要一个结果:
"aaa1234a": {
"ip": "192.168.1.4","aaa1235a": {
"ip": "192.168.1.5","aaa1236a": {
"ip": "192.168.1.6","otherInformation": "blabla6"
}
如果我不知道设备名称,但是看起来像“ aaa1234a”,那么如何用jq过滤此json,其中aaa-类型设备,最后一个“ a”-模型设备-1234-动态名称
解决方法
https://jqplay.org/s/n1kf-19yFT
使用输入
{
"error": 0,"descErr": "Ok","seqNumber": 0,"data": {
"events": [],"devices": {
"aaa1234a": {
"deviceType": "aaa","ip": "192.168.1.4","otherInformation": "blabla4"
},"aaa1235a": {
"deviceType": "aaa","ip": "192.168.1.5","otherInformation": "blabla5"
},"aaa1236a": {
"deviceType": "aaa","ip": "192.168.1.6","otherInformation": "blabla6"
}
}
}
}
当我执行查询时
.data.devices | to_entries | map({key,value: {ip: .value.ip,otherInformation: .value.otherInformation}}) | from_entries
我有输出
{
"aaa1234a": {
"ip": "192.168.1.4","otherInformation": "blabla4"
},"aaa1235a": {
"ip": "192.168.1.5","otherInformation": "blabla5"
},"aaa1236a": {
"ip": "192.168.1.6","otherInformation": "blabla6"
}
}
这是您所期望的吗?
,要选择与正则表达式模式“ ^ aaa。* a $”匹配的键,您可以编写:
.devices | with_entries(select(.key|test("^aaa.*a$")))
类似地,如果您想保留原始结构:
.data.devices |= with_entries(select(.key|test("^aaa.*a$")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。