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

如何使用赋值语法在jq中为对象的计算属性赋值?

jq中使用计算值作为键的对象赋值语法

你遇到的报错是因为as $o创建的是不可变的变量绑定,直接对$o[$key]赋值不符合jq的路径赋值规则。除了setpath,还有几种更直观的赋值语法可以实现需求:

1. 直接操作对象上下文

不需要将对象绑定到变量,直接在对象上下文使用动态键赋值:

jq -n --arg key foo '{} | .[$key] = 42'

输出结果:

{
  "foo": 42
}

2. 绑定变量后通过管道修改

如果必须使用变量绑定,可以通过管道将对象转为当前上下文后赋值:

jq -n --arg key foo '{} as $o | $o | .[$key] = 42'

或者重新绑定修改后的对象:

jq -n --arg key foo '{} as $o | ($o | .[$key] = 42) as $updated | $updated'

3. 动态键字面量构造对象

最简洁的方式是直接用动态键的对象字面量语法,一步构造目标对象:

jq -n --arg key foo '{($key): 42}'

同样会输出正确的键值对对象。

原错误写法分析

你之前的两种写法:

jq -n --arg key foo '{} as $o | $o[$key] = 42'
jq -n --arg key foo '{} as $o | ($o | .[$key]) = 42'

报错的核心原因是jq的赋值操作要求左侧是当前上下文中的可赋值路径,而$o是独立的变量绑定,无法直接作为路径起点进行赋值操作。而setpath方法是通过函数调用修改对象,绕开了路径赋值的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:24:54