シェルパイプラインでjq
を「普通に」振る舞わせることはできません。例えば:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
jq
は単にヘルプテキスト*を表示するだけです。 jq
の出力をファイルにリダイレクトしようとした場合も同じことが起こります。
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
jq
は、ttyから実行されていないと判断した場合、意図的に回避していますか?パイプラインでjq
を使用できるようにするには、どうしたらこの動作を防ぐことができますか?
* (この例には 猫の無用な使い方 が含まれていることに気付きました。これは説明のためだけのものです)
引数としてフィルタを提供する必要があります。 jq
がデフォルトで提供するプリティプリント以外の変更されていないものを介してJSONを渡すには、アイデンティティーフィルタ.
を使用します。
curl -s https://api.github.com/users/octocat/repos | jq '.' | cat
私がよくやっているユースケースの1つとして、"curl
などの他のシェルコマンドに渡すJSONデータを作成するにはどうすればよいですか?"--null-input/-n
オプションを使用する方法があります。
入力をまったく読んではいけません。代わりに、フィルタは入力として
null
を使用して1回実行されます。これは、単純な計算機としてjq
を使用する場合、またはJSONデータを最初から作成する場合に役立ちます。
そしてそれをcurl
に渡す例:
jq -n '{key: "value"}' | curl -d @- \
--url 'https://some.url.com' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'