如何提取满足条件的 aeson 值的一部分?

How to extract part of an aeson value that satisfies a condition?

我有一个 JSON 结构,如下所示:

{
  "instances": [
    {
      "instanceId": "i-1234",
      "tags": [
        {
          "value": "author1useast1",
          "key": "hostname"
        }
      ]
    },
    {
      "instanceId": "i-5678",
      "tags": [
        {
          "value": "proxy1useast1",
          "key": "hostname"
        }
      ]
    }
  ]
}

我想获取所有 instances/instanceId 的列表,其中 instances/tagshostnameauthor1useast1

我想过先得到一个key "instances" . _Values的实例列表,然后把它映射到一个(instanceIdtags)元组的列表中,然后进行过滤。然而,这对我来说看起来效率很低。

是否有更优雅/惯用的方式来做到这一点?

非常感谢!

如果要使用镜头,可以使用filtered光学,例如:

  key "instances" . values
. filtered (anyOf (key "tags" . values) $
    allOf (key "key") (=="hostname")
    <&&> allOf (key "value") (=="author1useast1"))
. key "instanceId"