使用 jq 在 JSON 数组中创建逗号分隔的列表字段

使用 jq 在 JSON 数组中创建逗号分隔的列表字段

我正在尝试使用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"

相关内容