jq: error: number and object cannot be subtracted
jq: error: number and object cannot be subtracted
我正在使用 jq 1.4 并且对以下情况感到困惑。我可以计算一个数字,但是当我尝试用这个数字构造一个对象时出现错误:
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":25}}}' |
jq '.aggregations
| {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value }
| .num_sent as $x
| .num_incoming_act as $y
| $y-$x as $d
| $d'
0
工作正常。但是
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":25}}}' |
jq '.aggregations
| {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value }
| .num_sent as $x
| .num_incoming_act as $y
| $y-$x as $d
| {diff: $d}'
jq: error: number and object cannot be subtracted
不起作用。当我在最后一部分请求对象时也会发生同样的情况:
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":25}}}' |
jq '.aggregations
| {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value }
| .num_sent as $x
| .num_incoming_act as $y
| $y-$x as $d
| objects'
jq: error: number and object cannot be subtracted
我喜欢jq的管道系统。但是,这里似乎发生了一些事情。我在第一个例子中得到的“0”是什么?好像不是一个正常的数字0。这又可以了:
jq -n ' 0 as $x | {diff: $x} '
这个
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":12}}}' | jq '.aggregations | {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value } | {diff:(.num_sent as $x | .num_incoming_act as $y | $y-$x as $d | $d)}'
将生产:
{
"diff": -13
}
区别就在这里;
上一个:.num_sent as $x | .num_incoming_act as $y | $y-$x as $d | {diff: $d}'
现在:{diff:(.num_sent as $x | .num_incoming_act as $y | $y-$x as $d | $d)}'
您可以通过可视化差异来了解,其中 jq
正在处理事物。
在出现错误的示例中,写 ($y-$x) as $d
而不是 $y-$x as $d
。在编写 (COMPOUND INFIX EXPRESSION) as $variable
.
时,括号有时是必需的,并且始终是可取的
解释:
解析器处理以下形式的表达式:
3-2 as $d | EXPR
如:
3-(2 as $d | EXPR)
这意味着 3-2 as $d|$d
被解析为 3-(2 as $d|$d)
,其计算结果为 3-2。但是请注意,在这种情况下,$d 本身的值为 2.
我正在使用 jq 1.4 并且对以下情况感到困惑。我可以计算一个数字,但是当我尝试用这个数字构造一个对象时出现错误:
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":25}}}' |
jq '.aggregations
| {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value }
| .num_sent as $x
| .num_incoming_act as $y
| $y-$x as $d
| $d'
0
工作正常。但是
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":25}}}' |
jq '.aggregations
| {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value }
| .num_sent as $x
| .num_incoming_act as $y
| $y-$x as $d
| {diff: $d}'
jq: error: number and object cannot be subtracted
不起作用。当我在最后一部分请求对象时也会发生同样的情况:
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":25}}}' |
jq '.aggregations
| {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value }
| .num_sent as $x
| .num_incoming_act as $y
| $y-$x as $d
| objects'
jq: error: number and object cannot be subtracted
我喜欢jq的管道系统。但是,这里似乎发生了一些事情。我在第一个例子中得到的“0”是什么?好像不是一个正常的数字0。这又可以了:
jq -n ' 0 as $x | {diff: $x} '
这个
echo '{"aggregations":{"sent":{"value":25},"bounced":{"value":null},"incoming_act":{"value":12}}}' | jq '.aggregations | {"num_sent": .sent.value, "num_incoming_act": .incoming_act.value } | {diff:(.num_sent as $x | .num_incoming_act as $y | $y-$x as $d | $d)}'
将生产:
{
"diff": -13
}
区别就在这里;
上一个:.num_sent as $x | .num_incoming_act as $y | $y-$x as $d | {diff: $d}'
现在:{diff:(.num_sent as $x | .num_incoming_act as $y | $y-$x as $d | $d)}'
您可以通过可视化差异来了解,其中 jq
正在处理事物。
在出现错误的示例中,写 ($y-$x) as $d
而不是 $y-$x as $d
。在编写 (COMPOUND INFIX EXPRESSION) as $variable
.
解释:
解析器处理以下形式的表达式:
3-2 as $d | EXPR
如:
3-(2 as $d | EXPR)
这意味着 3-2 as $d|$d
被解析为 3-(2 as $d|$d)
,其计算结果为 3-2。但是请注意,在这种情况下,$d 本身的值为 2.