![jqを使用してbash配列をコマンドラインからjson配列に変換するには? [コピー]](https://linux33.com/image/214611/jq%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6bash%E9%85%8D%E5%88%97%E3%82%92%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%8B%E3%82%89json%E9%85%8D%E5%88%97%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
$ jq -c -n -e '[$x, $y]' --argjson x '"a"' --argjson y '"b"'
["a","b"]
上記のようなことができることを知っています。以下のようにbash配列からjson配列を作成したい場合。任意の長さの引数を使用してこれを行う方法はありますか?
$ jq {some jq arguments} a b c # the bash array can be of an arbitrary length.
["a","b","c"]
入力を単純化したいので、a、b、cはコマンドラインから引用されません。
答え1
任意の文字列リストから有効なJSON配列を生成する2つの主な方法があります。 1つはjq
オプションを使用することです--args
。
jq -c -n '$ARGS.positional' --args "${mylist[@]}"
または、要素が文字列としてエンコードされていない場合(たとえば、純粋な数字、以前に準備されたJSON文字列、またはJSONオブジェクト全体である可能性があります)
jq -c -n '$ARGS.positional' --jsonargs "${mylist[@]}"
および--args
および--jsonargs
その引数はコマンドラインの最後の項目でなければなりませんjq
。
質問に示すように、-n
外部入力を読み取って「コンパクト」出力形式でJSONを生成する無効化を使用しています。-c
jo
別の方法は、コマンドラインからJSONを簡単に生成するために特別に設計されたツールであることを使用することです。
jo -a "${mylist[@]}"
-a
jo
与えられた引数から配列を生成するオプションです。
ツールjo
はオブジェクト自体の型を推論するため、次のリストが表示されます。
mylist=(1 2 3 4 5 b)
JSON配列に変換されます。
[1,2,3,4,5,"b"]