jq argjson 不适用于变量中的字符串

jq argjson does not work with string from variable

提问人:grobian 666 提问时间:11/15/2023 更新时间:11/15/2023 访问量:29

问:

我正在尝试使用 jq 创建一个 json

f=1
jq -n --argjson a ${f} '{"test":$a}'

f="1"
jq -n --argjson a ${f} '{"test":$a}'

jq -n --argjson a "teststring" '{"test":$a}'

工作正常

f="teststring"
jq -n --argjson a ${f} '{"test":$a}'

收益 率 jq:传递给 --argjson 的 JSON 文本无效

我做错了什么?

干杯 戈登

JSON JQ

评论

0赞 Botje 11/15/2023
您的第三个示例(内联传递)实际上不起作用。你真的想传递JSON还是只是一个字符串?"teststring"
0赞 grobian 666 11/15/2023
你是对的 这有效 jq -n --argjson a '“teststring”' '{“test”:$a}'
0赞 grobian 666 11/15/2023
实际上,我正在尝试从字符串数组创建一个json,例如[“path1”,“path2”,“path3”]

答:

1赞 Botje 11/15/2023 #1

您的 shell 正在解释双引号并将裸字符串传递给 。jq

定义输入的正确方法是添加一个额外的引号级别,使双引号成为值的一部分:

f='"teststring"'
jq -n --argjson a "${f}" '{"test":$a}'

如图所示,您还需要在 of 的用法周围加上引号,以防它包含空格。$f

评论

1赞 peak 11/15/2023
或者干脆使用 --arg,例如jq -n --arg a "$f" ....
0赞 grobian 666 11/15/2023
非常感谢!它有效!
0赞 Botje 11/15/2023
@ikegami 谢谢。我首先在没有引号的情况下在 zsh 上进行了测试,它有效,但 bash 不起作用$f
0赞 ikegami 11/15/2023
有趣!sh、bash、dash、ksh 都需要引号。惊讶于它在 zsh 中有所不同。(但我验证了这是真的:))