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

Linux bash中使用jq创建含变量键的JSON对象报错求助

解决jq动态变量键的问题

问题原因

你的命令报错是因为没有将Shell变量正确传递给jq,且jq中动态键的引用方式需要调整:

  1. jq里的$key是jq自身的变量,默认不会关联Shell的$key变量
  2. 直接用双引号包裹jq表达式会导致Shell提前解析变量,容易引发语法混乱或特殊字符错误

正确实现方式

jq支持动态变量键,只需通过--arg(字符串类型)或--argjson(JSON类型,如数字、数组)参数将Shell变量传入jq环境,再用($变量名)作为键名即可。

1. 键值均为字符串的场景

# 假设已定义Shell变量key和value
key="sender"
value="Alice"

# 直接让jq读取文件,无需cat管道
new_json_object=$(jq --arg k "$key" --arg v "$value" '. += {($k): $v}' last_sms.json)
echo "$new_json_object" | jq '.'

2. 值为JSON类型的场景

如果value是数字、布尔值、数组或对象,改用--argjson传递:

key="unread_count"
value=5

new_json_object=$(jq --arg k "$key" --argjson v "$value" '. += {($k): $v}' last_sms.json)
echo "$new_json_object" | jq '.'

关键说明

  • --arg k "$key":将Shell变量$key赋值给jq内部变量$k
  • {($k): $v}:用括号包裹$k,告诉jq这是一个动态键名,而非固定字符串
  • 避免用cat last_sms.json | jq ...的写法,直接让jq读取文件更高效且简洁

内容的提问来源于stack exchange,提问作者cidy.long

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:40:20