如何访问 Anible 中字典内的列表?

use*_*916 3 ansible

我有以下字典,里面有一个列表(项目

{
"json": {
    "data": {
        "devices": {
            "items": [
                {
                    "configurationStatus": "SYNCED",
                    "conflictDetectionState": "IN_SYNC",
                    "connectivityState": "ONLINE",
                    "deviceType": "ASA",
                    "highAvailability": "OFF",
                    "interfaces": null,
                    "specificDevice": {
                        "namespace": "asa",
                        "type": "configs",
                        "uid": "12313131231",
                        "vpnId": null
                    },
                    "uid": "1231312313"
                }
            ],
            "metadata": {
                "count": 1
            }
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我已将此输出注册在名为“输出”的变量下。如果我逐行查找项目,我可以毫无问题地访问它们

    - debug:
        var: output.json
    
Run Code Online (Sandbox Code Playgroud)

好的!

    - debug:
        var: output.json.data
Run Code Online (Sandbox Code Playgroud)

好的!

    - debug:
        var: output.json.data.devices
Run Code Online (Sandbox Code Playgroud)

好的!

    - debug:
        var: output.json.data.devices.items

ok: [localhost] => {
    "output.json.data.devices.items": "<built-in method items of dict object at 0x7f88386c8c00>"
Run Code Online (Sandbox Code Playgroud)

当我来到项目并想要访问configurationStatus或deviceType时,我收到上面的错误。我怀疑这是由于项目列表造成的。知道如何访问和注册这些变量吗?

lar*_*sks 5

问题是 ' 'items是字典类上方法的名称,当使用.符号 ( foo.bar.baz) 时,属性会在键之前解析。因此您无法访问items使用此语法命名的键。

相反,试试这个:

    - debug:
        var: output.json.data.devices['items']
Run Code Online (Sandbox Code Playgroud)

该语法将更喜欢键。