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

时间:2019-06-06 09:51:13

标签: sorting jq

我有产品的json更新流,我正在尝试按版本对最新的X版本进行排序(当前按发布日期进行排序)。

看起来jq无法直接对对象流进行排序,sort_by仅适用于数组,而且我找不到将流收集到不涉及管道输出的数组中的方法从jq -cjq -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'

但是我找不到limitsort_by在非数组上不起作用的东西。

我正在atlassian的json上测试以下版本:https://my.atlassian.com/download/feeds/archived/bamboo.json

1 个答案:

答案 0 :(得分:1)

jq中,您始终可以使用[..]将结果包含到数组中,该jq '[.[] | select(.platform | contains("Unix"))] | sort_by(.version) | limit(5;.[])' 将结果放入数组中,以供后续函数使用。您给定的要求可以简单地完成

reverse()

看到它在jq playground上进行了v1.6测试

并添加了reverse[]函数,引入了另一层数组嵌套。使用jq '[[.[] | select(.platform | contains("Unix"))] | sort_by(.version) | limit(5;.[]) ] | reverse' 单独转储对象

namespace myProject.A
{
    public class JsonWrapperA
    {
        [JsonProperty("name", Required = Required.AllowNull)]
        public string Name { get; set; }

        [JsonProperty("payload", Required = Required.AllowNull)]
        public Payload Payload { get; set; }
    }

    public class Payload
    {
        [JsonProperty("value", Required = Required.AllowNull)]
        public double Value { get; set; }
    }
}