$ 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"]