jQuery-从不同的键打印一行值

时间:2020-08-30 03:03:47

标签: arrays sorting search replace jq

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

谢谢

1 个答案:

答案 0 :(得分:1)

@csv可以保证产生CSV,但是如果希望无条件地显示字符串而没有引号,可以考虑使用join(", ")而不是@csv。由于您表示愿意接受其他一些价值分隔符,因此您不妨考虑使用@tsv

还可以减少jq程序中的冗余,因此您可能会遇到以下问题:

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