Arrays Jq-打印来自不同键的一行值
示例Json文件:Arrays Jq-打印来自不同键的一行值,arrays,sorting,search,replace,jq,Arrays,Sorting,Search,Replace,Jq,示例Json文件: [ { "Header": { "Tenant": "Test-d1", "Stage": "dev", "ProductType": "b2b", "Rcode": 401 },
[
{
"Header": {
"Tenant": "Test-d1",
"Stage": "dev",
"ProductType": "b2b",
"Rcode": 401
},
"Body": {
"error": {
"code": 401,
"message": "Unsupported authorization scheme"
}
}
},
{
"Header": {
"Tenant": "2734d7ac0f0e",
"Stage": "unknown",
"ProductType": "unknown",
"Rcode": 404
},
"Body": {
"error": {
"code": 404,
"message": "Not found"
}
}
}
]
期望输出:
Test-d1, dev, b2b, Unsupported authorization scheme, 401
2734d7ac0f0e, unknown, unknown, Not found, 404
因此,跳过只对某些值感兴趣的键,形成一行,用逗号、半列或其他分隔符将它们分隔开
我能想象的使用jq的最简单过程是将值放入数组并使用@csv
jq -r .[] | [ .Header.Tenant, .Header.Stage, .Header.ProductType, .Body.error.message, .Body.error.code ] | @csv
上面几乎实现了我想要的功能,但用双引号将每个值括起来。我可以使用其他一些工具来处理双引号,但我相信这在jq内部应该是可能的
使用jq的替代方法是什么
谢谢<代码> @ CSV 保证生成CSV,但是如果希望无条件地呈现字符串而没有周围的引号,则可以考虑使用<代码>连接(“,”)< /COD>而不是<代码> @ CSV 。由于您指示您对其他值分隔符开放,您可能还希望考虑<代码> @ TSV jq计划中的冗余也可以减少,因此您可能会得到:
.[]
| (.Header | [.Tenant, .Stage, .ProductType]) +
(.Body.error | [.message, .code ])
| @tsv