В приведенном ниже JSON я пытаюсь выбрать необработанное значение цены, когда цена is_rpp = True. Иногда это может быть первая цена или любая из N перечисленных цен, но в большинстве случаев ее нет или ОДНА is_rpp = истинная цена.
Это возможно?
Например, использование {{ $json["price"]["value"] }} действительно выбирает цену для меня, но я хочу, чтобы is_rpp = True price.
Спасибо
{
"position": 1,
"title": "Apple USB-C to Lightning Cable (2 m)",
"asin": "asintest",
"link": "https://www.amazon.com/",
"categories": [{
"name": "Electronics",
"id": "electronics"
}],
"image": "https://m.media-amazon.com/images/",
"is_prime": true,
"rating": 4.8,
"ratings_total": 15213956,
"prices": [{
"symbol": "$",
"value": 29,
"currency": "USD",
"raw": "$29.00",
"name": "$29.00",
"is_primary": true
},
{
"symbol": "$",
"value": 35,
"currency": "USD",
"raw": "$35.00",
"name": "$29.00",
"is_rrp": true
}
],
"price": {
"symbol": "$",
"value": 29,
"currency": "USD",
"raw": "$29.00",
"name": "$29.00",
"is_primary": true
},
"page": "1",
"position_overall": 1
}
Это будет использоваться в N8N: https://docs.n8n.io/code-examples/expressions/jmespath/#an-alternative-to-arrow-functions



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот что вы можете сделать, используя функцию Array.prototype.find:
Если он возвращает undefined, это означает, что внутри массива is_rpp = true нет элементов с условием prices.
$json.prices?.find(p => p.is_rrp)?.value
const $json = {
"position": 1,
"title": "Apple USB-C to Lightning Cable (2 m)",
"asin": "asintest",
"link": "https://www.amazon.com/",
"categories": [{
"name": "Electronics",
"id": "electronics"
}],
"image": "https://m.media-amazon.com/images/",
"is_prime": true,
"rating": 4.8,
"ratings_total": 15213956,
"prices": [{
"symbol": "$",
"value": 29,
"currency": "USD",
"raw": "$29.00",
"name": "$29.00",
"is_primary": true
},
{
"symbol": "$",
"value": 35,
"currency": "USD",
"raw": "$35.00",
"name": "$29.00",
"is_rrp": true
}
],
"price": {
"symbol": "$",
"value": 29,
"currency": "USD",
"raw": "$29.00",
"name": "$29.00",
"is_primary": true
},
"page": "1",
"position_overall": 1
};
const rrpPrice = $json.prices?.find(p => p.is_rrp)?.value;
console.info(rrpPrice); // 35Судя по документу, синтаксис должен быть {{ $jmespath($json.prices, "[?is_rrp==true].value") }}
это так близко, нет синтаксической ошибки, но возвращается только предыдущее значение... то есть: в этом случае он возвращает 29 вместо 35...
{{ $json.prices[?(@.is_rrp == true)].raw }}
Это даст вам необработанное значение цены, когда is_rrp имеет значение true в массиве цен.
Обратите внимание, что выражения JSONPath могут различаться в зависимости от конкретной реализации.
Я думаю, вы на что-то наткнулись с ограничением на конкретную реализацию... код не работает (он говорит о недопустимом синтаксисе). вот больше информации об ограничениях: хм, по какой-то причине это не работает, но это может быть ограничение N8N: docs.n8n.io/code-examples/expressions/jmespath/…
Понятно!
{{ $jmespath($json.prices, "[?is_rrp == `true`] | [0].value") }}
хм, по какой-то причине это не работает, но это может быть ограничение N8N: docs.n8n.io/code-examples/expressions/jmespath/…