Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如果键中有特殊字符,则无法从ansible_devices变量获取值_Json_Ansible_Ansible Playbook - Fatal编程技术网

Json 如果键中有特殊字符,则无法从ansible_devices变量获取值

Json 如果键中有特殊字符,则无法从ansible_devices变量获取值,json,ansible,ansible-playbook,Json,Ansible,Ansible Playbook,我使用gather事实变量从中获取大小。对于某些主机,我得到变量“ansible\u设备”:{“sda”,对于少数服务器,我得到“ansible\u设备”:{“cciss!c0d0” 问题:-当我使用ansible变量{{ansible\u devices.sda.size}}时,它工作得很好。但是当我试图从{ansible\u devices.cciss!c0d0.size}访问值时在我的剧本中,它不返回任何值,而在jsonansible\u设备变量中,{{ansible\u设备.cciss!

我使用gather事实变量从中获取大小。对于某些主机,我得到变量
“ansible\u设备”:{“sda”
,对于少数服务器,我得到
“ansible\u设备”:{“cciss!c0d0”

问题:-当我使用
ansible
变量
{{ansible\u devices.sda.size}}
时,它工作得很好。但是当我试图从
{ansible\u devices.cciss!c0d0.size}访问值时
在我的剧本中,它不返回任何值,而在json
ansible\u设备
变量中,
{{ansible\u设备.cciss!c0d0.size}
存在值

     {
        "ansible_devices": {
            "cciss!c0d0": {
                "holders": [],
                "host": "RAID bus controller: Hewlett-Packard Company Smart Array Controller (rev 03)",
                "model": "LOGICAL VOLUME",
                "partitions": {},
                "removable": "0",
                "rotational": "1",
                "scheduler_mode": "cfq",
                "sectors": "143299800",
                "sectorsize": "512",
                "size": "68.33 GB",
                "support_discard": "0",
                "vendor": "HP"
            }
        },
        "item": ""
    }
它可能是
ansible
变量json键中的大小写特殊字符,这就是我无法获取其值的原因。

有人能建议我如何访问这里的
{{ansible\u devices.cciss!c0d0.size}
值吗?

如果您使用的是javascript,还可以通过以下方式获取JSON数据:

ansible_devices["cciss!c0d0"]
它将在cciss!c0d0键下显示整个对象,然后您通常可以使用内置函数,如大小

因此,尝试使用:

ansible_devices["cciss!c0d0"].size

使用
ansible\u devices
ansible变量从其边缘
hostvars[inventory\u hostname][“ansible\u devices”]
然后它会给我正确的值。我不知道这背后的确切原因是什么,但这是解决这个问题的诀窍

{{ hostvars[inventory_hostname]["ansible_devices"]["cciss!c0d0"]["size"] }}

我在

中得到了这个解决方案,这个问题与JavaScript无关。不过,你有没有尝试过这个解决方案,而且你从来没有提到过任何需要解析数据的语言。请在对其他答案进行否决之前编辑你的问题。我没有对sumit进行否决。因为我在这个问题中添加了
ansible
标记,所以这是一个显而易见的问题与ansible相关。我在ansible剧本中也提到了我面临的这个问题。