我正在尝试使用jq
将 JSON 数组内的值连接到单行逗号分隔列表中。 (没有尾随逗号)
{
"hardware": [
"abc",
"def",
"ghi"
]
}
创建“abc、def、ghi”
我可以使用将值连接在一起
jq -jr '(.hardware[])' input.json
abcdefghi
我尝试插入逗号和空格但无法工作
jq -jr '(.hardware[]|join(", ")'
jq: error: syntax error, unexpected $end (Unix shell quoting issues?) at <top-level>, line 1:
(.hardware[]|join(", ")
有人能指出我要使用的正确语法吗?
谢谢
电车
答案1
您正在寻找
jq -r '.hardware | join(", ")'
您发布的版本中的语法错误是因为开头(
没有匹配的)
,但在任何情况下join
都需要一次给出所有值,因此.hardware
优于.hardware[]
(一次传递一个值)。
答案2
您的jq
表达式包含不平衡的括号。该join()
函数还需要一个数组,而不是单个值(使用.hardware | join(", ")
而不是.hardware[] | join(", ")
)。
如果您想要格式正确的 CSV 输出,您可以使用表达式.hardware | @csv
:
$ jq -r '.hardware | @csv' file.json
"abc","def","ghi"