【问题标题】:JQ Filter for parent IDs and child IDs with date evaluation带有日期评估的父 ID 和子 ID 的 JQ 过滤器
【发布时间】:2021-04-14 16:58:46
【问题描述】:

我的截止日期很紧,正在努力解决一个不公开 SQL 视图但确实通过 API 公开一些元素的产品。希望在 curl 查询之后在 PIPE 中进行此处理。

复制:

curl -x GET -u {credentials} {endpoint fqdn} | jq

    {
  "total_count": 34,
  "Passwords": [
    {
      "username": "testusername",
      "category": null,
      "device_ids": [],
      "view_users": "",
      "view_groups": "",
      "last_pw_change": "2021-04-13T13:30:03Z",
      "notes": "",
      "storage": "Normal",
      "use_only_users": "",
      "label": "EXPIRED",
      "view_edit_groups": "",
      "first_added": "2021-04-13T13:30:03.790Z",
      "use_only_groups": "",
      "storage_id": 1,
      "view_edit_users": "admin",
      "password": "",
      "id": 36,
      "custom_fields": [
        {
          "notes": null,
          "key": "expiry-event",
          "value": "2021-4-13"
        }
      ]
    }
  ],
}

以上是通过 curl 返回的示例。我希望能够获取 USERNAME、STORAGE_ID,然后是 CUSTOM_FIELDS > KEY 和 CUSTOM_FIELDS > VALUE

当密钥 = 到期事件时 并且该键的 VALUE 早于今天的日期。

这可以通过 JQ 过滤实现吗?我不确定日期选项是 JQ 中的一个函数。但我们将不胜感激。

我尝试过滤到单独的数组中,但我收到了 FAILED TO BUILD BODY 错误。谢谢!

【问题讨论】:

  • 理想情况下,结果会显示 username: testusername storage_id: 1 key: expiry-date value: 2021-4-13 并且只显示到期键(可能有超过 1 个自定义字段)并且日期在今天之前()
  • 标题中提到了“jquery”。您指的是 “jq” 吗?此外,根据minimal reproducible example 指南,请给出一个完整的示例,显示您期望的与示例输入相对应的输出,顺便说一下,它有一个额外的逗号,使其在技术上作为 JSON 无效。
  • 嗨@peak 对标题道歉。我已经纠正了。结果显示出来。它只是一个带有 | 的 API 请求。给jq。我也将其添加到示例中。

标签: curl jq


【解决方案1】:

鉴于您的示例输入(没有额外的逗号,使其在技术上作为 JSON 无效),以下生成如下所示的输出:

def prior($yymmdd): sub("-(?<d>\\d)-"; "-0\(.d)-") <= ($yymmdd);

(now|strflocaltime("%Y-%m-%d")) as $now
| .Passwords[]
| {username,
   storage,
   custom_fields : .custom_fields | map(select(.key == "expiry-event" and (.value|prior($now)))) }
   

您可以轻松删除任何不需要的字段,例如使用del/1,或者指定你想要的键。

输出

{
  "username": "testusername",
  "storage": "Normal",
  "custom_fields": [
    {
      "notes": null,
      "key": "expiry-event",
      "value": "2021-4-13"
    }
  ]
}

【讨论】:

  • 嗨@peak我能够处理这个但是它正在返回所有结果。它仅限于正确的字段,但会返回系统中的每个结果。我制作了 3 条记录,并填写了自定义字段。 2个过去,1个未来。我希望只检索过去日期的 2。相反,我得到了所有记录,即使是那些没有填写该字段的记录,以及将来的记录。我正在提交这样的请求:
  • curl -k -X GET -u 'HIDDEN' '12.34.56.789/api/1.0/passwords' | jq 'def 先验($yymmdd): sub("-(?\\d)-"; "-0(.d)-")
  • 也许您可以更新 Q 并根据minimal reproducible example 准则给出一个最小但简洁的示例。 (可以举出一个以上的例子。)
  • 再次...这是示例。它是对 API 端点的查询并使用 JQ 进行后期操作。我已经分享了 API 请求和结果数据集。我已经分享了我想要的输出。没有更多数据可提供,它正在满足文档中的示例,以获取最少的可重复示例。除非您拥有相同的产品,否则您将无法专门复制,我保证您不会,除非您拥有企业公司。
猜你喜欢
  • 2018-09-30
  • 2022-08-19
  • 2017-10-03
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多