如何根据字段值连接 JQ 中的虚拟值,然后对这些串联进行 CSV 聚合?



在我的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 的调用合并为一个,那就更好了。

最新更新