JQ переформатирование десятичных знаков в научной записи - можно ли этого избежать?

Я нашел разницу между JSON-данными, созданными JavaScipt и через jq с bash (и другими языками программирования). С помощью JavaScript я могу создавать десятичные числа до шести цифр после точки, даже когда я использую float(), Но с jq Он отличается, потому что добавление десятичного значения занимает четыре цифры только после десятичной точки.

Моя проблема в том, что мне нужны десятичные числа для хранения в SQL, до шести цифр после запятой.

Пример:

$ JSON='{"decimal":0.00001}'
$ echo "$JSON" | jq .
{
  "decimal": 1e-05
}

Моя цель - подтвердить десятичность с помощью этой строки...

if [[ "$TMP_DECIMAL" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then

Любой совет / suggsestion?

2 ответа

Решение

Вы не можете изменить jqПоведение - в настоящее время запросы на соответствующие функции по-прежнему открыты - но вы можете переформатировать свои номера после того, как они были получены. Например:

json='{"decimal":0.00001}'
decimal=$(jq '.decimal' <<<"$json")
decimal_f=$(awk -v decimal="$decimal" 'BEGIN { printf("%f\n", decimal) }' </dev/null)

echo "JQ emitted $decimal; reformatted as $decimal_f"

Кроме того, вы можете переформатировать JSON используя модуль Perl JSON:: PP.

perl -0777 -MJSON::PP -E '$s=<>; $j=JSON::PP->new->ascii->pretty->allow_nonref->allow_bignum;$p=$j->decode($s);say $j->encode($p)'

или лучше:

perl -0777 -MJSON::PP -E '
    $j=JSON::PP->new->ascii->pretty->allow_nonref->allow_bignum;
    $p=$j->decode(<>);
    say $j->encode($p)'

Решающим является allow_bignum,

Пример:

echo '{"decimal":0.00000001}' | perl ....

печать

{
   "decimal" : 0.00000001
}

но без allow_bignum печать

{
   "decimal" : 1e-08
}

PS: ... а также, можно проверить весь JSON с помощью Perl...:)

Фиксация, сделанная 21 октября 2019 г., гарантирует, что jq обычно сохранит "внешний" формат чисел. Есть некоторые исключения, например, лишние ведущие нули.

На следующей странице приведены подробные сведения об установке "невыпущенной" версии jq: https://github.com/stedolan/jq/wiki/Installation

Другие вопросы по тегам