有一个像这样的json文件:
[
{
"createdAt": 1548729542000,
"platform": "foo"
},
{
"createdAt": 1548759398000,
"platform": "foo"
},
{
"createdAt": 1548912360000,
"platform": "foo"
},
{
"createdAt": 1548904550000,
"platform": "bar"
}
]
现在我想通过使用 jq 获取 foo 平台的最大 createdAt 值,如何实现?
jq '.[] | select(.platform=="foo") | .createdAt | max' foo.json
jq: error (at <stdin>:17): number (1548729542000) and number (1548729542000) cannot be iterated over
jq '.[] | select(.platform=="foo") | max_by(.createdAt)' foo.json
jq: error (at <stdin>:17): Cannot index number with string "createdAt"
exit status 5
jq '.[] | select(.platform=="foo") | .createdAt'
,那么它显然会输出行。map
接受一个数组并输出一个新数组。所以我不清楚为什么map
在这里起作用... 好吧,它能够正常工作表明原始查询没有生成一个数组,但我不理解其中的区别。 - Anentropic.[] | select(.platform=="foo") | .createdAt
产生数字,而map(select(.platform=="foo") | .createdAt)
产生一个数组。当你执行1, 2, 3 | max
时,max
应用于每个数字(并失败,因为它们不是数组);当你执行[1, 2, 3] | max
时,它应用于整个数组(并返回具有最大值的元素)。 - oguz ismail