示例Json文件:
[
{
"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的替代方法是什么?
谢谢
答案 0 :(得分:1)
@csv
可以保证产生CSV,但是如果希望无条件地显示字符串而没有引号,可以考虑使用join(", ")
而不是@csv
。由于您表示愿意接受其他一些价值分隔符,因此您不妨考虑使用@tsv
。
还可以减少jq程序中的冗余,因此您可能会遇到以下问题:
.[]
| (.Header | [.Tenant, .Stage, .ProductType]) +
(.Body.error | [.message, .code ])
| @tsv