jqのYAML/XMLラッパー yq でJSONとYAMLを自在に操る
ども、大瀧です。
JSONをいい感じに操るCLIツールjqは皆さんご存知かと思います。最近、YAMLを触る機会が増えてきたので、同じように使えるツールはないかなぁと思っていたら、jqのYAML/XMLラッパーであるyqが使いやすかったのでご紹介します。
yqとは
yqはYAMLが扱えるjqのラッパーです。jq同様の豊富なフィルタ構文でYAMLを操作できるのが特徴です。
jqを事前にインストールしておき、Python pipでインストールします。
$ pip install yq |
yqの使い方
yqの入力は、標準入力ないしファイルでJSON形式とYAML形式の両方に対応します。出力はデフォルトがJSON、-y
オプションを指定してYAMLになります。フィルタなし('.'
を指定)でも、JSON-YAMLの相互変換が可能です。
1 2 3 4 5 6 7 8 9 10 11 12 | { "Samples" : [ { "name" : "satoshi" , "topics" : "CV Debuted" }, { "name" : "tsumoto" , "nickname" : "gyopa-" } ] } |
$ yq -y '.' sample.json # JSONファイルを入力しYAMLで出力 Samples: - name: satoshi topics: CV Debuted - name: tsumoto nickname: gyopa- $ |
$ yq -y '.' sample.json > sample.yml # sample.ymlに保存 $ yq '.' sample.yml # YAMLファイルをJSONで出力 { "Samples" : [ { "Sample1" : { "name" : "satoshi" , "topics" : "vc debuted" } }, { "Sample2" : { "name" : "tsumoto" , "nickname" : "gyopa-" } } ] } $ |
あとは、jqの豊富なフィルタがそのまま使えるので、抽出や置換などYAMLを煮るなり焼くなり自由に料理しちゃいましょう。
$ cat sample.yml Samples: - name: satoshi topics: CV Debuted - name: tsumoto nickname: gyopa- $ yq -y '.Samples[].name' sample.yml # nameのみ抽出 satoshi --- tsumoto ... $ yq -y '.Samples[].name |= . + "-san"' sample.yml # nameの値を置換 Samples: - name: satoshi-san topics: CV Debuted - name: tsumoto-san nickname: gyopa- $ |
良い感じですね。
まとめ
jqのYAMLラッパーであるyqをご紹介しました。最近YAMLファイルを扱うことが増えてきた気がするので、重宝する機会が多くなりそうですね。 ちなみに私は、AWS CLIの結果(JSON)をEmbulkの設定ファイル(YAML)にコピペするのに役立ちました。