我有产品的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'
但是我找不到limit
和sort_by
在非数组上不起作用的东西。
我正在atlassian的json上测试以下版本:https://my.atlassian.com/download/feeds/archived/bamboo.json
答案 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; }
}
}