jq フィルタリング curl - 「文字列で番号をインデックスできません」

jq フィルタリング curl - 「文字列で番号をインデックスできません」

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

tailjq にパイプしていた変数には JSON と HTTP の両方がありました。まず、とを使用して変数を JSON と HTTP に分割する必要がありますhead。純粋な JSON を jq にパイプしたら、うまくいきました。

関連情報