Selon ce que vous entendez par moins cher, si vous voulez choisir l'élément a la valeur minimale de price1 et Prix2 combinés, vous pouvez utiliser: 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"
}
Les &
doit être au début du deuxième argument parce que le type attendu est une référence d'expression. Le &sum([price1,price2])
indique que pour chaque élément dans le tableau wines
, évaluez l'expression sum([price1,price2])
et utilisez la valeur résultante pour déterminer quel élément dans le tableau est le minimum.
Autre exemple, si vous voulez sélectionner l'élément dans la liste des vins qui a le prix le plus bas de soitprice1
ou price2
, vous pouvez remplacer sum
avec 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"
}
'wines' est un paire clé/valeur dans un objet, ce ne serait donc pas 'min_by (obj.wines, & price1, & price2) .name' (si votre objet s'appelle' obj'). Je ne suis pas familier avec jmespath donc c'est une supposition. – Andy
non, c'est juste un exemple que vous avez raison, le problème est dans le calcul d'une somme @Andy –
Pouvez-vous préciser comment vous calculez le moins cher? Est-ce l'article qui a la plus faible valeur de 'price1' et' price2'? Ou est celui qui a la plus faible valeur de «price1 + price2»? – jamesls