jq を使用して curl リクエストをフィルタリングし、特定のフィールドを取得して変数に格納しようとしています。最初は、次のような基本的な curl リクエストを使用していました。
myResponse=$(curl -u myUsername:myPassword -XGET "https://myWebsite.com/_count?pretty&q=TEST")
ユーザー名とパスワードを入力し、「TEST」という用語が何回出現したかをカウントし、きれいな JSON 形式で返します。この応答は、myResponse という変数に格納されます。
json から特定のカウント値を取得するために、jq を使用してこれをフィルタリングしました。
count=`echo $myResponse | jq -r '.count'`
これはうまくいき、数字が得られました。
そこで、少し実験してみました。curl リクエストからの応答を取得するだけでなく、応答コード (200、404 など) も取得したいと考えました。そこで、curl リクエストを次のように変更しました。
myResponse=$(curl --write-out %{http_code} --silent -u myUsername:myPassword -XGET "https://myWebsite.com/_count?pretty&q=DEBUG")
これにより、JSON 応答が正常に返され、その後、http 応答コードが数値として返されました。
ただし、これを jq に渡すと、次のエラーが発生します。
jq: error: Cannot index number with string
このエラーを解決するにはどうすればよいですか? json だけだったときは jq で問題なく処理されましたが、最後にこの応答コードが追加されるとすぐに解析できなくなります。
ありがとう
答え1
tail
jq にパイプしていた変数には JSON と HTTP の両方がありました。まず、とを使用して変数を JSON と HTTP に分割する必要がありますhead
。純粋な JSON を jq にパイプしたら、うまくいきました。