Ansible:如何将列表转换为整数

时间:2019-03-16 05:36:44

标签: python json list ansible integer

我有以下json输出

"lc_facts": {
        "changed": false, 
        "failed": false, 
        "launch_configurations": [
            {
                "block_device_mappings": [
                    {
                        "device_name": "/dev/sda1", 
                        "ebs": {
                            "delete_on_termination": true, 
                            "volume_size": 40, 
                            "volume_type": "gp2"
                        }
                    }
                ]
            }
       ]
  }

下面的查询

- debug:
    msg: "{{ lc_facts.launch_configurations|json_query('[*].block_device_mappings[0].ebs.[volume_size]') | flatten }}"

给予

    "msg": [
    [40]
    ]

我想转换为整数,以便可以使用此值。我尝试了所有方法,但我只想获取没有括号的数字。最后我还添加了|int,但它给了我0的值,这很奇怪。

请帮助,我真的很麻烦。

3 个答案:

答案 0 :(得分:3)

括号创建一个列表。 “ [[40]]”是带有一个元素“ 40”的列表的列表。下面的游戏

vars:
  var1: [[40]]
tasks:
  - debug: var=var1
  - debug: var=var1[0]
  - debug: var=var1[0][0]

给予:

"var1": [
    [
        40
    ]
]

"var1[0]": [
    40
]

"var1[0][0]": "40"

答案 1 :(得分:2)

尝试获取索引为[0]的列表的第一个元素。 如果该列表在另一个列表中,请执行两次:

对于msg = [40],请使用msg [0]

对于味精= [[40]]使用味精[0] [0]

答案 2 :(得分:0)

def dict_to_obj(obj, data):
    for d in data:
        if isinstance(data[d], dict):
            setattr(obj, str(d), obj.__class__())
            dict_to_obj(getattr(obj, str(d)), data[d])
        else:
            setattr(obj, str(d), data[d])
    return obj

class Empty:pass
obj = Empty()
obj = dict_to_obj(obj,Your_JSON_object)
#Now here you get all json attributes as objects e.g.
#to get volume_size : 
print(obj.lc_facts.launch_configurations.block_device_mappings.ebs.volume_size)
# but for this to work, you need to restructure your json nested key-value pairs like 
# this :-
"launch_configuration" : {....}
# instead of this :-
"launch configuration" : [ {....} ]

我希望这会有所帮助。