2017-09-22 23 views
0

とキーの配列に値を追加します。は、私は、単純なJSON配列を持っているJQ

[ 
"smoke-tests", 
"other-tests" 
] 

私は、単純なJSONに変換したい:

{"smoke-tests": true, 
"other-tests": true 
} 

私はJQ例をいくつか試してみましたしかし、私が欲しいものは何もしていないようです。

jq '.[] | walk(.key = true)'は、コンパイルエラーが発生します。

jq 'reduce .[] as $k ({}; .[$k]=true)' file 

出力:

{ 
    "smoke-tests": true, 
    "other-tests": true 
} 

答えて

1

あなたreduceの効率化などの明示的reduceを使用しない場合:

. as $in | {} | .[$in[]] = true 
+0

おかげで、@peak。エレガントでシンプル。 – AG6HQ

0

.[] | {(.): true}が(キーとして)値をマッピングする辞書に各項目を変換しますtrue。その周囲を[ ]とすると、そのようなオブジェクトのリストが生成されます。 addに送信すると、それらを1つのオブジェクトに結合します。

1
$ s='["smoke-tests", "other-tests"]' 
$ jq '[.[] | {(.): true}] | add' <<<"$s" 
{ 
    "smoke-tests": true, 
    "other-tests": true 
} 

それがどのように機能するか内訳:reduce()機能付き

1

ここでは、追加使用してソリューションです。 Charlesのソリューションに近いですが、Object constructionの動作を使用して、複数の結果を返す式で使用すると複数のオブジェクトを暗黙的に返すようになりました。

[{(.[]):true}]|add 
関連する問題