You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jq变量赋值报错:为何尝试将数字与对象执行add操作?

jq表达式优先级导致的加法错误解析

问题重现

原始执行的命令:

echo '{"foo": 1}' | jq '.foo + 2 as $bar | {$bar}'

预期输出:

{
  "bar": 3
}

实际得到错误:

jq: error (at <stdin>:1): number (1) and object ({"bar":2}) cannot be added

添加括号后可正常运行:

echo '{"foo": 1}' | jq '(.foo + 2) as $bar | {$bar}' 

输出结果:

{
  "bar": 3
}

错误原因

核心是jq的运算符优先级:as的优先级高于+,原始语句的执行顺序和你预想的完全不同。

原始语句.foo + 2 as $bar | {$bar}会被jq解析成:

.foo + (2 as $bar | {$bar})

执行步骤:

  1. 先处理括号内部分:把数字2赋值给变量$bar,再用{$bar}生成对象{"bar":2}
  2. 尝试把.foo的值(1)和这个对象做加法运算
  3. jq不支持数字与对象相加,因此抛出错误

修正原理

添加括号(.foo + 2) as $bar后,强制让加法运算优先执行:

  1. 先计算.foo + 2得到数字3
  2. 把3赋值给变量$bar
  3. 最后用{$bar}生成包含bar:3的对象,得到预期结果

内容的提问来源于stack exchange,提问作者johnsyweb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:27