在我的bash脚本中,当我对我的curl结果运行以下jq时:curl -u someKey:someSecret someURL 2>/dev/null | jq -r '.schema' | jq -r -c '.fields'
我得到一个 JSON 数组,如下所示:[{"name":"id","type":"int","doc":"Documentation for the id field."},{"name":"test_string","type":"string","doc":"Documentation for the test_string field"}]
我的目标是使用 jq 进行调用以返回以下内容(给定上面的示例(:{"id":1234567890,"test_string":"xxxxxxxxxx"}
注意:我正在尝试自动生成与上面显示的"架构"JSON 匹配的模板化值。
所以澄清一下,那就是:
-
所有数组对象(上面显示的可能超过 2 个(在单个逗号分隔的行中返回
-
文档字段将被忽略
- "name"的值(包括其周围的双引号(与以下任一值连接:
- :1234567890 ...当该对象的"类型"为"int"时
- ":xxxx" ...当该对象的"类型"是"字符串">
注意:这些将是我们现在获得的唯一类型
有人可以告诉我如何扩展我的初始 jq 以返回它吗?
注意:我尝试沿着以下路径工作,但失败了......curl -u someKey:someSecret someURL 2>/dev/null | jq -r '.schema' | jq -r -c '.fields' | "(.name):xxxxxxxxxxx"'
如果在纯 JQ 中不可能(我的偏好(,我也很高兴有一个混合了一些 sed/awk 魔法:)
的解决方案干杯
斯坦
给定显示的 JSON,您可以将以下内容添加到管道中:
jq -c 'map({(.name): (if .type == "int" then 1234567890 else "xxxxxxxxxx" end)})|add'
使用该 JSON,输出将为:
{"id":1234567890,"test_string":"xxxxxxxxxx"}
但是,如果将三个对 jq 的调用合并为一个,那就更好了。