JQ: Как умножить значения, которые распознаются как строки? - PullRequest
2 голосов
/ 03 июля 2019

Я пытаюсь получить какую-то торговую информацию из биржи. Оба значения .p и .q заключены в двойные кавычки в JSON, который я получаю из сокета.

Когда я пытаюсь умножить два значения, оно говорит, что я пытаюсь умножить две строки. Поэтому я пропускаю эти строки, хотя фильтр тонизатора и сообщение об ошибке немного меняются, но не могу заставить его работать на самом деле.

JSON:

{"e":"aggTrade","E":1562109562958,"s":"BTCUSDT","a":134343336,"p":"10796.60000000","q":"0.00139000","f":147532295,"l":147532295,"T":1562109562951,"m":false,"M":true}

За командами ниже следуют их выводы:

... | jq  '"\(.p*.q)"'
    jq: error (at <stdin>:1): string ("10796.6000...) and string ("0.00139000") cannot be multiplied

Тогда:

... | jq  '"\(.p|tonumber*.q|tonumber)"'
jq: error (at <stdin>:1): Cannot index string with string "q"
... | jq  '"\("\(.p|tonumber)"*"\(.q|tonumber)")"'
jq: error (at <stdin>:1): string ("10796.6") and string ("0.00139") cannot be multiplied

Самое близкое, что я получаю, с приведенным ниже кодом, но он выводит много страниц результатов, и я ожидаю только один результат ...

... | jq  '.q as $qtty | "\(.p|tonumber*$qtty|tonumber)"'

Или:

... | jq  '.q as $qtty | "\(.p|tonumber*"\($qtty|tonumber)")"'

Выводит слишком много цифр!

Даже с параметром -r он не работает. Я ожидаю, что появится только необработанный результат умножения, например:

15.0072740

1 Ответ

2 голосов
/ 03 июля 2019

Проще говоря,

jq -r '(.p | tonumber)*(.q | tonumber)'
...