【问题标题】:Jq tsv error in formatting an array/object格式化数组/对象时出现 Jq tsv 错误
【发布时间】:2021-03-12 01:18:00
【问题描述】:

我有 json 文件,我可以使用以下命令循环并获取所需的值。我试图在将这些值显示为表格格式时获得一些见解。我正在使用@tsv,但收到错误object ({"release":...) cannot be tsv-formatted, only array。如何获得以下输出显示?

我想要的输出如下所示:

Release         Installed    Latest    Old      Deprecated
-------         ---------    ------    ---      ----------
test-app        1.0.0        2.0.0     true     false    

jq:

cat test.json | jq '.test[] | select((.outdated or .deprecated) and ((.release|startswith("update")) | not) and ((.release|startswith("upgrade")) | not))'

json:

{
    "test": [{
        "release": "myapp1",
        "Installed": {
            "version": "0.3.0",
            "appVersion": "v1.2.6"
        },
        "Latest": {
            "version": "",
            "appVersion": ""
        },
        "outdated": false,
        "deprecated": false
    }, {
        "release": "myapp2",
        "Installed": {
            "version": "6.5.13",
            "appVersion": "1.9.1"
        },
        "Latest": {
            "version": "",
            "appVersion": ""
        },
        "outdated": false,
        "deprecated": false
    }, {
        "release": "test-app",
        "Installed": {
            "version": "1.0.0",
            "appVersion": ""
        },
        "Latest": {
            "version": "2.0.0",
            "appVersion": ""
        },
        "outdated": true,
        "deprecated": false
    }, {
        "release": "update-app",
        "Installed": {
            "version": "1.0.0",
            "appVersion": ""
        },
        "Latest": {
            "version": "3.0.0",
            "appVersion": ""
        },
        "outdated": true,
        "deprecated": false
    }, {
        "release": "upgrade-app",
        "Installed": {
            "version": "2.0.0",
            "appVersion": ""
        },
        "Latest": {
            "version": "2.0.0",
            "appVersion": ""
        },
        "outdated": false,
        "deprecated": true
    }]
}

【问题讨论】:

    标签: json export-to-csv jq


    【解决方案1】:

    @csv@tsv 都需要一个数组作为输入,因此您只需将以下内容附加到您的 jq 过滤器:

    | [.release, .Installed.version, .Latest.version, .outdated, .deprecated]
    | @tsv
    

    【讨论】:

    • 不错!我做了cat test.json | jq '.test[] | select((.outdated or .deprecated) and ((.release|startswith("update")) | not) and ((.release|startswith("upgrade")) | not)) | [.release, .Installed.version, .Latest.version, .outdated, .deprecated] | @tsv' 并得到了这个结果test-app\t1.0.0\t2.0.0\ttrue\tfalse。添加标题的正确方法是什么?
    • 我跟进了另一个关于空值的问题:stackoverflow.com/questions/66603976/…
    猜你喜欢
    • 2018-07-23
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多