Json

使用 jq 在 JSON 數組中創建逗號分隔的列表欄位

  • September 17, 2019

我正在嘗試使用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(", ")

有人可以指出我要使用的正確語法嗎?

謝謝

電社

你正在尋找

jq -r '.hardware | join(", ")'

您發布的版本中的語法錯誤是因為開頭(沒有匹配的),但無論如何join都需要一次給出所有值,所以.hardware.hardware[](一次將它們傳遞一個)要好。

您的jq表達式包含不平衡的括號。該join()函式還需要一個數組,而不是單個值(使用.hardware | join(", ")而不是.hardware[] | join(", "))。

如果您想要正確格式化的 CSV 輸出,您可以使用表達式.hardware | @csv

$ jq -r '.hardware | @csv' file.json
"abc","def","ghi"

引用自:https://unix.stackexchange.com/questions/542185