json - Bash 脚本使用 jq 遍历多行 JSON 对象

标签 json bash curl jq

我必须 curl 到一个网站 (statuscake.com),该网站以 JSON 格式发回多个项目,其中每一行都包含多个项目。我想从每一行中提取其中的两个,WebsiteName 和 TestID,这样我就可以检查 WebsiteName 是否与我感兴趣的匹配,获取 TestID 并将其传递给第二个 curl 语句以删除测试。

虽然比较复杂,但是返回的JSON本质上是这样的形式

[{"TestID": 123, "WebsiteName": "SomeSite1"}, {"TestID": 1234, "WebsiteName": "SomeSite2"}]

我似乎找不到一个神奇的 jq 命令来一次完成所有工作 - 如果有的话,我会很高兴看到它。

我有

cat $data | jq '[.[] | .WebsiteName]' 

获取一组网站名称(对于 TestIDs 来说也是一个非常相似的数组,但我认为我做了一些愚蠢的事情。数据是从 curl 返回的信息,用于获取 JSON 并且填充正常。

我希望能够将它们分配给两个数组,names 和 ids,然后在 names 中搜索相关名称的索引,从 ids 中获取 id 并将其传递给 curl。除非有更好的方法。

有什么建议吗?

最佳答案

我的 Xidel可以通过使用类似 XPath 的查询选择 JSON 来一次完成所有操作:

例如从对象数组中返回所有 WebsiteName 包含“site2”的 ID:

xidel /tmp/x.json -e '$json()[contains((.).WebsiteName, "site2")]/TestID'

或者例如下载原始 JSON,然后使用 id 发出 HTTP 请求:

xidel http://statuscake.com/your-url... -f '$json()[contains((.).WebsiteName, "site2")]/TestID!x"/your-delete-url{.}..."'

关于json - Bash 脚本使用 jq 遍历多行 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29628089/

相关文章:

使用 Google+ API 进行 jQuery JSON 解析

json - 解码 json http 响应

file - 区分两个文件并只保留新的或更改的行

linux - 如何在 Linux 中显示过去 5 分钟添加的文件内容而不扫描整个文件?

C# 与 PHP 脚本通信时无法创建 SSL/TLS 安全通道异常

带有 json 数据的 Jquery ajax 请求未到达 spring mvc Controller

bash - 如何自动重试 SFTP 连接尝试?

php - 强制 cURL 在 HTTP 请求的代理上使用 GET

php - 如何使用 curl_setopt() 将提供的带有内联参数的单行 cURL 代码转换为格式

php - libcurl 中不支持或禁用协议(protocol) "smb"