首页 > 解决方案 > 在嵌套的 json 列表和字典上运行 json_query()

问题描述

尝试在 ansible playbook 中运行查询。如何获取相应“严重性”值为中等的项目的“名称”,数据如下:

[
        [
            {
                "Name": "CVE-2019-13307",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13304",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13305",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13295",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13297",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13391",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13300",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-15140",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-13306",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-11597",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2019-11598",
                "Severity": "medium",
                "fix_version": null
            },
            {
                "Name": "CVE-2020-10251",
                "Severity": "medium",
                "fix_version": null
            }
        ],
        [
            {
                "Name": "CVE-2020-3910",
                "Severity": "high",
                "fix_version": null
            },
            {
                "Name": "CVE-2020-3909",
                "Severity": "high",
                "fix_version": null
            }
        ],
        [
            {
                "Name": "CVE-2018-20225",
                "Severity": "medium",
                "fix_version": null
            }
        ],
        [
            {
                "Name": "CVE-2013-2099",
                "Severity": "medium",
                "fix_version": "3.3.2-r1, 3.2.5-r1, 2.6.8, 2.7.3-r1"
            }
        ],
        [
            {
                "Name": "CVE-2019-9740",
                "Severity": "medium",
                "fix_version": "2.7.172.7, 3.5.73.5, 3.6.93.6, 3.7.43.7"
            }
        ],
        [
            {
                "Name": "CVE-2020-8492",
                "Severity": "medium",
                "fix_version": null
            }
        ]
    ]

尝试使用json_query('[[].?Severity== medium].Name')时,出现以下错误:

fatal: [asd]: FAILED! => {"msg": "JMESPathError in json_query filter plugin:\nBad jmespath expression: Unknown token ?:\n[[].?Severity==`medium`].Name\n    ^"}

标签: jsonansible

解决方案


做得很好,我上面的字典是从另一个 json_query() 生成的。我确实在该查询的末尾添加了一个“| flatten”以删除 dict 括号,然后我就能够查询 dict。


推荐阅读