使用 JQ 的多个过滤器

2024-01-01

我的老板希望我们的团队使用 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

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

我将其视为转换为 CSV(但使用不同的分隔符,即制表符)。

首先将数据转换为您的行。

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

使用这些新对象,您可以构建行值数组并写出该行。而不是将数组传递给@csv过滤器,只需用选项卡将它们连接起来即可。

[ .OptionGroupName, .InstanceIdentifier, .Version ] | join("\t")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JQ 的多个过滤器 的相关文章

随机推荐