问答 百科手机端

合并多个jq调用以排序和限制对象流的内容

2023-04-19 16:29
我试图获取按版本排序的最新X版本(它们目前按发布日期排序)。Jq看起来不能直接排序对象流,也找不到如何在不包含将jq-c的输出传递给jq-s的数组中收集流。但是,我找不到那些不能在limits和sort_by非数组中工作的东西;你总是可以使用[..]将结果包含在一个数组中。为了操作下面的函数,给定的请求可以很容易地完成如下
提问开始:

我有一个产品更新的json流,我正在尝试获得按版本排序的最新X版本(它们目前是按发布日期排序的)。

看起来jq不能直接对对象流进行排序,sort_by只能在数组上工作,我也找不到一种方法来将流收集到一个不涉及通过管道将jq -c的输出传递给jq -s的数组中。

我目前的解决方案是:

< xx \
    jq -c '.[] | select(.platform | contains("Unix"))' \
    | jq -cs 'sort_by(.version) | reverse | .[]' \
    | head -5 \
    | jq -C . \
    | less

我希望能够使用

jq '.[] | select(...) | sort_by(.version) | limit(5) | reverse'

但是我找不到limits和sort_by不能在非数组上工作的东西。

我正在atlassian的json上测试它的发行版:https://my.atlassian.com/download/feeds/archived/bamboo.json

回答开始:得票数 1

jq中,您总是可以使用[..]将结果包含到一个数组中,然后将结果放到一个数组中,以便后续函数对其进行操作。您给定的需求可以简单地按如下方式完成

jq '[.[] | select(.platform | contains("Unix"))] | sort_by(.version) | limit(5;.[])'

查看它在v1.6上测试的jq playground上的工作情况

并且通过添加reverse()函数,引入了另一个级别的数组嵌套。使用reverse[]单独转储对象

jq '[[.[] | select(.platform | contains("Unix"))] | sort_by(.version) | limit(5;.[]) ] | reverse'
总结

以上是真正的电脑专家为你收集整理的合并多个jq调用以排序和限制对象流的内容的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。

热门