curl - jq - 添加使用外部命令计算的条目
问题描述
我的输入:
{
"data": [
{
"Name": "name 1",
"Url": "https://some-content.com"
},
{
"Name": "name 2",
"Url": "https://soming-else.com"
}
}
我想检查content-type
每个对象Url
并将curl
其添加到每个对象中。所以,我会得到:
{
"data": [
{
"Name": "name 1",
"Url": "https://some-content.com",
"ContentType": "video"
},
{
"Name": "name 2",
"Url": "https://soming-else.com",
"ContentType": "text"
}
}
我用来检查content-type
响应标头值的命令:
curl -sSL <url> -o /dev/null -w '%{content_type}'
我觉得这xargs
是正确的方法,但我还没有弄清楚如何以上述方式将其结果添加到输入 JSON 中。
我也知道 jq 的=|
运营商,但我不知道如何得到xrags
它的结果。
我的问题有解决方案吗?可以使用我尝试使用的工具来完成吗?
解决方案
你|=
对更新输入的相关性是正确的,我假设它在一个名为 input.json 的文件中
不幸的是,正如您已经注意到的,jq 不支持“外部”评估,但这里有一种方法,至少是直接的,只需要两次调用 jq:
while read url ; do
curl -sSL "$url" -o /dev/null -w '%{content_type}'
done < <(jq -r .data[].Url input.json) |
jq -Rn --argfile json input.json '
[inputs] as $in
| $json
| .data |= reduce range(0;length) as $i (.;
.[$i].ContentType = $in[$i])
'
推荐阅读
- html - React 中两个类之间的转换 - React 路由问题
- android - 在没有 notifyDataSetChange 的情况下刷新列表?
- ios12 - layoutMargins 在 iPhone 和 iPad 上不一致
- swift - 将坐标存储到 Firebase 中的实时数据库
- c - 将睡眠与 Pthread 一起使用时在 C 中出现分段错误
- go - 在 Go 中解组到结构时的奇怪行为
- r - 将多个反应性 geom_lines 添加到闪亮的图形
- haskell - 也许单子和一个列表
- vala - 具有协议缓冲区“proto3”支持的 Vala 程序
- python - 无模块程序