使用 JQ 的多个过滤器
Multiple filters using 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
使用在单个表达式中使用多个 []
的过滤器时,请务必谨慎行事。一不小心,可能会得到意想不到的结果。
我会将此视为转换为 CSV(但使用不同的分隔符,制表符)。
首先将数据转换为您的行。
.Collections[] | { InstanceIdentifier, Version } + (.OptionGroups[] | { OptionGroupName })
使用这些新对象,您可以构建行值数组并写出行。不要将数组传递给 @csv
过滤器,只需使用制表符将它们连接起来即可。
[ .OptionGroupName, .InstanceIdentifier, .Version ] | join("\t")
我的老板希望我们的团队使用 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")