jqを使用してJSON配列にカンマ区切りリストフィールドを作成する

jqを使用してJSON配列にカンマ区切りリストフィールドを作成する

jqを使用して、JSON配列内の値をカンマで区切られた1行のリストにリンクしようとしています。 (末尾のカンマなし)

{
  "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すべての値を一度に提供する必要があるため(一度に1つの値を渡す).hardwareよりも優れています。.hardware[]

答え2

jqに不均衡括弧が含まれています。また、このjoin()関数は単一値ではなく配列を期待します(.hardware | join(", ")代わりに使用.hardware[] | join(", "))。

正しい形式のCSV出力が必要な場合は、次の式を使用できます.hardware | @csv

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

関連情報