如何在给定日期之间选择json对象

时间:2019-03-11 12:18:05

标签: json datetime jq

以下是api的json响应。需要使用jq(在shell脚本内)从json获取汇率。 以下是条件:     对于给定的currencyfrom和currencyto,开始日期应等于或大于当前日期,结束日期应等于或小于当前日期。

[
    {
        "status": "ACTIVE",
        "startdate": "2019-01-31T00:00:00.000Z",
        "enddate": "2019-02-07T00:00:00.000Z",
        "source": "default",
        "exchangerate": "12",
        "currencyfrom": "AUD",
        "currencyto": "BRL",
        "id": "64ce2916-af8a-42b9-9fb9-def47f824ea2"
    },
    {
        "status": "ACTIVE",
        "startdate": "2019-03-10T00:00:00.000Z",
        "enddate": "2019-03-30T00:00:00.000Z",
        "source": "default",
        "exchangerate": "13",
        "currencyfrom": "BRL",
        "currencyto": "GBP",
        "id": "4fd0dc10-d6b7-4298-924d-281a0d49c2e9"
    },
    {
        "status": "ACTIVE",
        "startdate": "2019-03-10T00:00:00.000Z",
        "enddate": "2019-03-10T16:20:10.813Z",
        "source": "default",
        "exchangerate": "17",
        "currencyfrom": "AUD",
        "currencyto": "BRL",
        "id": "52bfe481-f4cf-4822-9566-886c4faeaf10"
    }
]

1 个答案:

答案 0 :(得分:1)

忽略时区注意事项,您可以将以下辅助功能用作时间比较的基本构件:

def secs: sub("\\....(?<z>.)$"; .z) | fromdate;

使用它,您可以在数组中选择JSON对象,同时保留数组结构,如下所示:

now as $now
| map(select(.startdate|secs) <= $now and $now <= (.enddate|secs)) )

这与您的描述不太吻合,但确实有道理。

选择对象后,您可以按照通常的方式提取感兴趣的字段。

相关问题