使用JQ的多个过滤器

贾戈

我的老板希望我们的团队使用JQ解析JSON文件。我使用的应用会生成需要转换的JSON。我有一个看起来像这样的文件:

{
    "Collections": [
        {
            "OptionGroups": [
                {
                    "OptionGroupName": "Test1",
                    "Status": "in-sync"
                }
            ],
            "Version": "3.4.25",
            "InstanceIdentifier": "Dev1"
        },
        {
            "OptionGroups": [
                {
                    "OptionGroupName": "Test2",
                    "Status": "in-sync"
                }
            ],
            "Version": "3.4.22",
            "InstanceIdentifier": "Dev2"
        }
    ]
}

执行此操作时,使用JQ:

cat json.txt | jq -r '.Collections[].OptionGroups[].OptionGroupName, .Collections[].InstanceIdentifier, .Collections[].Version'

我得到以下输出:

Test1
Test2
Dev1
Dev2
3.4.25
3.4.22

我如何获得看起来像这样的输出:

Test1    Dev1    3.4.25
Test2    Dev2    3.4.22
杰夫·梅卡多(Jeff Mercado)

当使用[]在单个表达式中使用多个过滤器时,请务必谨慎行事如果不小心,可能会得到意想不到的结果。

我会将其转换为CSV(但使用其他定界符,制表符)。

首先将数据转换为行。

.Collections[] | { InstanceIdentifier, Version } + (.OptionGroups[] | { OptionGroupName })

使用这些新对象,您可以建立行值的数组并写出该行。无需将数组传递给@csv过滤器,只需将它们与制表符连接即可。

[ .OptionGroupName, .InstanceIdentifier, .Version ] | join("\t")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章