Json 使用JQ的多个滤波器

Json 使用JQ的多个滤波器,json,filter,jq,Json,Filter,Jq,我的老板希望我们的团队使用JQ解析JSON文件。我使用的应用程序生成我需要转换的JSON。我有一个文件如下所示: { "Collections": [ { "OptionGroups": [ { "OptionGroupName": "Test1", "Status": "in-sync" }

我的老板希望我们的团队使用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"
        }
    ]
}
Test1    Dev1    3.4.25
Test2    Dev2    3.4.22
使用JQ,当我执行以下操作时:

cat json.txt | jq -r '.Collections[].OptionGroups[].OptionGroupName, .Collections[].InstanceIdentifier, .Collections[].Version'
我得到这个输出:

Test1
Test2
Dev1
Dev2
3.4.25
3.4.22
如何获得如下所示的输出:

{
    "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"
        }
    ]
}
Test1    Dev1    3.4.25
Test2    Dev2    3.4.22

使用在单个表达式中使用多个
[]
的筛选器时,请务必小心。如果你不小心,你可能会得到意想不到的结果

我将把这当作转换为CSV(但使用不同的分隔符,一个选项卡)

首先将数据转换为您的行

.Collections[] | { InstanceIdentifier, Version } + (.OptionGroups[] | { OptionGroupName })
使用这些新对象,您可以构建行值数组并写出行。不要将数组传递给
@csv
过滤器,只需使用选项卡将它们连接起来即可

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

顺便说一句,我们团队中没有人知道答案,这就是为什么我把我的问题贴在这里。谢谢,这解决了问题,所以我接受了答案。我们使用的是jq1.3,所以我不能使用“join”,但是@csv生成的输出我可以使用。