这是我的JSON test.json
文件:
[
{
"name": "nodejs",
"version": "0.1.21",
"apiVersion": "v1"
},
{
"name": "nodejs",
"version": "0.1.20",
"apiVersion": "v1"
},
{
"name": "nodejs",
"version": "0.1.11",
"apiVersion": "v1"
},
{
"name": "nodejs",
"version": "0.1.9",
"apiVersion": "v1"
},
{
"name": "nodejs",
"version": "0.1.8",
"apiVersion": "v1"
}
]
当我使用max_by
时,jq
返回0.1.9
而不是0.1.21
可能是由于引用的值:
cat test.json | jq 'max_by(.version)'
{
"name": "nodejs",
"version": "0.1.9",
"apiVersion": "v1"
}
如何获取带有version = 0.1.21的元素?
答案 0 :(得分:1)
factanal(na.omit(ecases[v$items]), factors = 10, rotation = "promax")
中的开箱即用。您需要使用jq
分隔的字段
.
jq 'sort_by(.version | split(".") | map(tonumber))[-1]'
从split(".")
获取字符串,并创建一个字段数组,即.version
成为0.1.21
的数组,而[ "0", "1", "21"]
接受一个输入数组,将字符串元素转换为数字数组。
map(tonumber)
函数对从最后一步生成的数组中的每个元素进行索引明智的比较,并以升序排序,最后是包含版本sort_by()
的对象。符号0.1.21
是从此排序数组中获取最后一个对象。
答案 1 :(得分:1)
这里是使用jq在更一般的答案的改编 How to sort Artifactory package search result by version number with JFrog CLI?
def parse:
[splits("[-.]")]
| map(tonumber? // .) ;
max_by(.version|parse)
作为一种不太可靠的单行代码:
max_by(.version | [splits("[.]")] | map(tonumber))