1

我有点困惑。我已经尝试过 jmespath,但没有帮助。我需要获得一个包含指定对象的高级对象。在下面的示例中,我们看到了一个关于 HDD 的事实。我需要获取包含指定分区的 HDD 的磁盘名称(或)sdfsdg例如.dm-0sdf1

我有这个 jmespath 查询:

msg.*.[partitions.sdf1]

但它只是向我展示了里面的一切sdf1。像这样的过滤器[?partitions=="sdf1"]在这里不起作用,所以问题是:如何sdf在我的示例中保留整个对象?

提前致谢!

  {
    "msg": {
        "sdf": {
            "partitions": {
                "sdf1": {
                    "holders": [],
                    "links": {
                        "ids": [
                            "17101686F123-part1",
                            "wwn-0x123456-part1"
                        ]
                    },
                    "sectors": "1875380224"
                 }
            },
            "removable": "0",
            "rotational": "0"
        },
        "sdg": {
            "partitions": {
                "sdg1": {
                    "holders": [],
                    "links": {
                        "ids": [
                            "164414123CEB-part1",
                            "wwn-0x1233451234831ceb-part1"
                        ]
                    },
                     "uuid": "F301-FA7F"
                }
             },
            "removable": "0"
         },
        "dm-0": {
            "holders": [],
            "host": "",
            "links": {
                "ids": [],
                "uuids": []
            },
            "vendor": null,
            "virtual": 1
        }
      }
   }
4

1 回答 1

0

这应该有效:

msg.*.{value: @, condition: partitions.sdf1}[?condition].value

解释

首先,我们为每个 HDD 对象创建一个临时对象:{value, condition}. condition如果相应的 HDD ( , ) 对象上不存在,null则为。如果存在,将包含该对象,即:partitions.sdf1sdfsdg dm-0partitions.sdf1condition

"condition": {
  "holders": [],
  "links": {
    "ids": [
      "17101686F123-part1",
      "wwn-0x123456-part1"
    ]
  },
  "sectors": "1875380224"
}

使用[?condition]你过滤掉所有在哪里condition的对象null。最后,我们使用.value

于 2018-08-25T10:39:24.387 回答