如何过滤Jinja中的字典?

Mik*_* T. 5 dictionary jinja2 ansible jmespath

我有一个字典,其中package-name是的字典,一些细节的字典是value

{
        "php7.1-readline": {
            "latest": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1", 
            "origins": [
                "ppa.launchpad.net"
            ], 
            "version": "7.1.6-2~ubuntu14.04.1+deb.sury.org+1", 
            "www": "http://www.php.net/"
        }, 
        "php7.1-xml": {
            "latest": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1", 
            "origins": [
                "ppa.launchpad.net"
            ], 
            "version": "7.1.6-2~ubuntu14.04.1+deb.sury.org+1", 
            "www": "http://www.php.net/"
        }, 
        "plymouth": {
            "version": "0.8.8-0ubuntu17.1"
        },
    ....
}
Run Code Online (Sandbox Code Playgroud)

我想将以上内容简化为仅包含latest其属性为-attribute 的包的字典。

似乎json_query是要使用的过滤器,但是我无法弄清楚语法。那里的例子似乎都是在词典列表上操作的,而不是相同词典列表 ...

例如,如果我将上述字典“管道”到中json_query('*.latest'),我会得到实际最新版本的列表

[
  "7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
  "7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
  "7.1.6-2~ubuntu14.04.1+deb.sury.org+1"
]
Run Code Online (Sandbox Code Playgroud)

我如何获取整个字典元素呢?

有希望吗

tec*_*raf 4

随着2017 年 12 月添加的dict2items过滤器,可以使用本机功能:

- debug:
    msg: "{{ dict(pkg | dict2items | json_query('[?value.latest].[key, value.latest]')) }}"
Run Code Online (Sandbox Code Playgroud)

结果:

"msg": {
    "php7.1-readline": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
    "php7.1-xml": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1"
}
Run Code Online (Sandbox Code Playgroud)