jqを使用してbash配列をコマンドラインからjson配列に変換するには? [コピー]

jqを使用してbash配列をコマンドラインからjson配列に変換するには? [コピー]
$ 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[@]}"

-ajo与えられた引数から配列を生成するオプションです。

ツールjoはオブジェクト自体の型を推論するため、次のリストが表示されます。

mylist=(1 2 3 4 5 b)

JSON配列に変換されます。

[1,2,3,4,5,"b"]

おすすめ記事