jinja2动态导航到json对象

时间:2018-10-17 15:28:38

标签: json ansible jinja2

我的问题看起来微不足道,但是我已经花了几个小时了。

如何使用jinja2动态导航到json变量。 例如:我知道

ansible_lvm.vgs:
    "vgs": {
                "vgdata": {
                    "free_g": "16",
                    "size_g": "0"
                },
                "vgswap": {
                    "free_g": "0",
                    "size_g": "00"
            }
        }

在jinja2结构中,我想获得“ vgdata”的“ free_g”属性: 以下代码均无效:

   {% set my_vg_name = 'vg_data' %}
   {% set my_vg_size = ansible_lvm.vgs.(my_vg_name).free_g %}
   {% set my_vg_size = ansible_lvm.vgs.{{my_vg_name}}.free_g %}
   {% set my_vg_size = ansible_lvm.vgs|selectattr(my_vg_name, 'free_g') %}

感谢您的帮助,

1 个答案:

答案 0 :(得分:0)

因此,我希望顶部的代码段只是一个示例,而不是您真正使用的代码,因为它是格式错误的JSON。而且,我希望您在键为vgs时实际上不会向vg_data对象请求vgdata,因为那样子永远都不会结束。

那边:

您可以使用dict语法访问python中的vgs[my_vg_name]个对象,或者如果不确定vgs包含该键,vgs.get(my_vg_name, {})来提供空的{{1如果dict不包含其值在vgs变量中的键,则为默认值。

也许这只是一个不好的问题,但是如果您始终想要my_vg_name,那么为什么要进行动态访问呢?