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"