使用 jmespath 通过两个参数查找最小值和最大值
find min and max by two parameters with jmespath
我有这样的对象,我需要用 jmespath
评估哪个是 "cheapest"
{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}
输出应该是:'a'对象
我在做:
min_by(wines, &price1, &price2).name
min_by(wines, &price1).name
min_by(wines, sum(&price1, &price2)).name
但运气不好
根据你所说的最便宜的意思,如果你想选择 price1 和 price2 组合的最小值的项目,你可以使用:min_by(wines, &sum([price1,price2]))
:
$ echo '{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}' | jp 'min_by(wines, &sum([price1,price2]))'
{
"price2": 1,
"price1": 50,
"name": "a"
}
&
需要位于第二个参数的开头,因为预期类型是表达式引用。 &sum([price1,price2])
表示对于 wines
数组中的每个项目,计算表达式 sum([price1,price2])
并使用结果值来确定数组中的哪个项目是最小值。
再举一个例子,如果您想 select 酒单中价格最低的商品 price1
或 price2
, 你可以将 sum
替换为 min
:
$ echo '{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}' | jp 'min_by(wines, &min([price1,price2]))'
{
"price2": 1,
"price1": 50,
"name": "a"
}
我有这样的对象,我需要用 jmespath
评估哪个是 "cheapest"{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}
输出应该是:'a'对象
我在做:
min_by(wines, &price1, &price2).name
min_by(wines, &price1).name
min_by(wines, sum(&price1, &price2)).name
但运气不好
根据你所说的最便宜的意思,如果你想选择 price1 和 price2 组合的最小值的项目,你可以使用:min_by(wines, &sum([price1,price2]))
:
$ echo '{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}' | jp 'min_by(wines, &sum([price1,price2]))'
{
"price2": 1,
"price1": 50,
"name": "a"
}
&
需要位于第二个参数的开头,因为预期类型是表达式引用。 &sum([price1,price2])
表示对于 wines
数组中的每个项目,计算表达式 sum([price1,price2])
并使用结果值来确定数组中的哪个项目是最小值。
再举一个例子,如果您想 select 酒单中价格最低的商品 price1
或 price2
, 你可以将 sum
替换为 min
:
$ echo '{
"wines": [
{
"name": "b",
"price1": 30,
"price2": 110
},
{
"name": "a",
"price1": 50,
"price2": 1
},
{
"name": "c",
"price1": 40,
"price2": 1130
}
]
}' | jp 'min_by(wines, &min([price1,price2]))'
{
"price2": 1,
"price1": 50,
"name": "a"
}