jq中--argjson参数使用变量字符串报错问题求助
问题原因与解决方法
核心问题
--argjson 参数要求传入的是合法的JSON格式值,你最后一个例子里传递的 teststring 是裸字符串,不符合JSON字符串必须用双引号包裹的规则,所以jq判定这是无效JSON,抛出错误。
为什么前几个例子能运行?
- 前两个例子中,变量
f的值是1(不管有没有引号),这是合法的JSON数字类型,--argjson可以直接识别。 - 第三个例子你写的
--argjson a "teststring"理论上应该也会报错,大概率是输入时有笔误,比如误写成了专门传递普通字符串的--arg参数。
正确的解决方式
方式1:用--arg传递普通字符串(推荐)
--arg是专门用来传递shell字符串的参数,jq会自动将其转换为合法的JSON字符串:
f="teststring" jq -n --arg a ${f} '{"test":$a}'
方式2:如果一定要用--argjson,需构造合法JSON字符串
给变量值加上JSON要求的双引号,确保传递的是合法JSON格式:
f="teststring" jq -n --argjson a "\"${f}\"" '{"test":$a}' # 或者提前给变量套好双引号 f="\"teststring\"" jq -n --argjson a ${f} '{"test":$a}'
内容的提问来源于stack exchange,提问作者grobian 666
相关产品推荐
相关产品推荐

