Вы не опубликовали фактический JSON, поэтому я собираюсь использовать следующий JSON и использовать его в качестве входных данных.
' so_55981304.json ':
{
"uri": "localhost:8081/abc/api/build",
"builds": [
{
"uri": "/my-build",
"lastStarted": "2019-04-17T19:36:35.705-700"
},
{
"uri": "/sample1",
"lastStarted": "2019-04-18T02:56:38.325-705"
},
{
"uri": "/sample2",
"lastStarted": "2019-04-19T09:46:19.675-800"
},
{
"uri": "/sample3",
"lastStarted": "2019-04-21T21:36:59.955-200"
},
{
"uri": "/sample4",
"lastStarted": "2019-04-21T99:56:38.635-600"
},
{
"uri": "/sample5",
"lastStarted": "2019-04-21T98:57:28.855-300"
},
{
"uri": "/sample6",
"lastStarted": "2019-04-22T56:55:35.725-200"
},
{
"uri": "/sample7",
"lastStarted": "2019-04-23T12:12:20.655-100"
},
{
"uri": "/sample8",
"lastStarted": "2019-04-24T89:54:23.305-700"
},
{
"uri": "/sample9",
"lastStarted": "2019-04-25T22:53:59.205-500"
},
{
"uri": "/sample10",
"lastStarted": "2019-04-26T02:32:55.605-600"
},
{
"uri": "/sample11",
"lastStarted": "2019-04-26T07:12:35.405-800"
},
{
"uri": "/sample12",
"lastStarted": "2019-04-27T06:55:30.505-700"
},
{
"uri": "/sample13",
"lastStarted": "2019-04-27T09:26:20.905-300"
},
{
"uri": "/sample14",
"lastStarted": "2019-04-27T05:36:10.705-200"
},
{
"uri": "/sample15",
"lastStarted": "2019-04-28T02:26:50.205-100"
},
{
"uri": "/sample16",
"lastStarted": "2019-04-29T01:26:55.105-700"
},
{
"uri": "/sample17",
"lastStarted": "2019-04-30T09:26:55.705-900"
},
{
"uri": "/sample18",
"lastStarted": "2019-04-30T08:22:35.705-600"
},
{
"uri": "/sample19",
"lastStarted": "2019-05-01T06:11:44.705-960"
},
{
"uri": "/sample20",
"lastStarted": "2019-05-01T07:07:36.705-320"
},
{
"uri": "/sample21",
"lastStarted": "2019-05-01T01:59:22.705-800"
},
{
"uri": "/sample22",
"lastStarted": "2019-05-02T02:22:35.705-300"
},
{
"uri": "/sample23",
"lastStarted": "2019-05-02T09:33:45.705-700"
},
{
"uri": "/sample24",
"lastStarted": "2019-05-02T08:36:55.655-955"
},
{
"uri": "/sample25",
"lastStarted": "2019-05-02T03:18:55.709-950"
},
{
"uri": "/sample26",
"lastStarted": "2019-05-03T03:19:38.705-500"
},
{
"uri": "/sample27",
"lastStarted": "2019-05-03T03:26:35.705-400"
}
]
}
(Примечание: "2019-04-21T99:56:38.635-600"
, 99
часов ... действительно ?! Это недопустимый dateTime .)
Xidel анализатор HTML / XML / JSON (с использованием шаблонов CSS, XPath, XQuery, JSONiq и шаблонов) может делать то, что вы хотите.
xidel -s so_55981304.json --xquery '
for $x in $json/(builds)()
where $x/lastStarted lt current-dateTime() - duration("P7D")
order by $x/lastStarted
return $x
'
Возвращает все объекты из массива builds
доcurrent-dateTime() - duration("P7D")
(2019-04-27T14:22:40.359
на данный момент).
Также обратите внимание, что необходимо order by $x/lastStarted
, потому что (при условии вашего списка lastStarted
атрибутов в исходном сообщении) они не отсортированы правильно.
Для подсчета этих объектов просто поставьте count(
)
вокруг запроса:
xidel -s so_55981304.json --xquery '
count(
for $x in $json/(builds)()
where $x/lastStarted lt current-dateTime() - duration("P7D")
order by $x/lastStarted
return $x
)
'
Это вернет 15
.