我有一个略微修改过的JSON文件,其中包含来自https://api.ipsw.me/v2.1/firmwares.json的iOS固件信息。这是一个简化的版本:
输入
{
"AppleTV5,3": {
"firmwares": [
{
"version": "9.2",
"buildid": "13Y234"
},
{
"version": "9.1.1",
"buildid": "13U717"
},
{
"version": "9.1",
"buildid": "13U85"
}
],
"bdid": 52,
"name": "Apple TV 4 (2015)"
},
"AppleTV3,2": {
"firmwares": [
{
"version": "8.4.1",
"buildid": "12H523"
},
{
"version": "8.3",
"buildid": "12F69"
}
],
"bdid": 0,
"name": "Apple TV 3 (2013)"
},
"AppleTV3,1": {
"firmwares": [
{
"version": "8.4.1",
"buildid": "12H523"
},
{
"version": "8.3",
"buildid": "12F69"
},
{
"version": "8.2",
"buildid": "12D508"
}
],
"bdid": 0,
"name": "Apple TV 3"
}
}
我想编写一个jq查询,该查询仅返回firmwares
阵列中最新固件对象的每个外部对象。例如:
所需的输出
{
"AppleTV5,3": {
"firmwares": [
{
"version": "9.2",
"buildid": "13Y234"
}
],
"bdid": 52,
"name": "Apple TV 4 (2015)"
},
"AppleTV3,2": {
"firmwares": [
{
"version": "8.4.1",
"buildid": "12H523"
}
],
"bdid": 0,
"name": "Apple TV 3 (2013)"
},
"AppleTV3,1": {
"firmwares": [
{
"version": "8.4.1",
"buildid": "12H523"
}
],
"bdid": 0,
"name": "Apple TV 3"
}
}
我可以通过以下方式获取最新firmwares
对象的列表:
.[].firmwares | max_by(.version)
我可以从中获取值version
:
.[].firmwares | map(.version | values) | max
而且我可以通过firmwares
匹配特定的对象来获取外部AppleTV对象version
:
[ . | to_entries[] | .value.firmwares |= map ( select ( .version == "8.3" ) ) ] | from_entries
但是我似乎无法结合这些技术来获得所需的输出。有人可以帮忙吗?
您应该将其视为更新firmwares
数组。我们正在使用已选择最高版本的过滤版本进行更新。
.[].firmwares |= [ max_by(.version | split(".") | map(tonumber)) // empty ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句