![jq 过滤 curl-‘无法使用字符串索引数字’](https://linux22.com/image/1497587/jq%20%E8%BF%87%E6%BB%A4%20curl-%E2%80%98%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%B4%A2%E5%BC%95%E6%95%B0%E5%AD%97%E2%80%99.png)
我正在尝试使用 jq 过滤 curl 请求以获取特定字段并将它们放入变量中。最初,我使用的是这样的基本 curl 请求:
myResponse=$(curl -u myUsername:myPassword -XGET "https://myWebsite.com/_count?pretty&q=TEST")
我提供了我的用户名和密码,并获取了“TEST”一词出现的次数,该计数以漂亮的 JSON 格式返回。此响应被放入名为 myResponse 的变量中。
我使用 jq 对其进行过滤,从 json 中获取特定的计数值:
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
我传入 jq 的变量中既有 JSON 也有 HTTP。首先必须使用tail
and将变量拆分为 JSON 和 HTTP head
。一旦我将纯 JSON 传入 jq,它就可以正常工作。