Arrays Jq-打印来自不同键的一行值

Arrays Jq-打印来自不同键的一行值,arrays,sorting,search,replace,jq,Arrays,Sorting,Search,Replace,Jq,示例Json文件: [ { "Header": { "Tenant": "Test-d1", "Stage": "dev", "ProductType": "b2b", "Rcode": 401 },

示例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的替代方法是什么


谢谢

<代码> @ CSV 保证生成CSV,但是如果希望无条件地呈现字符串而没有周围的引号,则可以考虑使用<代码>连接(“,”)< /COD>而不是<代码> @ CSV 。由于您指示您对其他值分隔符开放,您可能还希望考虑<代码> @ TSV jq计划中的冗余也可以减少,因此您可能会得到:

.[] 
| (.Header     | [.Tenant, .Stage, .ProductType]) + 
  (.Body.error | [.message, .code ])
| @tsv