如何使用赋值语法在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
相关产品推荐
相关产品推荐

