从Ansible解析JSON

从Ansible解析JSON,json,parsing,ansible,Json,Parsing,Ansible,我在网上寻找,但我找不到解决方案,情况相当复杂。 我有一个json数组,其值如下: [ { "IP1": "1.2.3.4" "IP1_VLAN": "900 - CLOUD-DEV" "IP1_Role": "Management" "IP2": "4.5.6.7" "IP2_VLAN": "901 - CLOUD-DEV" "IP2_Role": "Production" "IP2": "8.9.10.1

我在网上寻找,但我找不到解决方案,情况相当复杂。 我有一个json数组,其值如下:

[
  {
      "IP1": "1.2.3.4"
      "IP1_VLAN": "900 - CLOUD-DEV"
      "IP1_Role": "Management"
      "IP2": "4.5.6.7"
      "IP2_VLAN": "901 - CLOUD-DEV"
      "IP2_Role": "Production"
      "IP2": "8.9.10.11"
      "IP2_VLAN": "902 - CLOUD-DEV"
      "IP2_Role": "Backup"
  }
]   
我的目标是:“选择具有管理角色的IP并告诉我地址”,它应该选择
IP*\u role==Management
,在这种情况下告诉我
1.2.3.4


你知道如何处理这个问题吗?

在我的评论之后,我2美分的回答是:在实际的数据结构中搜索将是困难和丑陋的。如果你可以选择稍微改变一下,事情会变得容易得多

下面是一个使用以下演示剧本中yaml声明的列表的示例。使用相关表达式(即调试任务中的
query
变量)提取数据

PLAY[localhost]********************************************************************************************************************************************************************************************************************************************************
任务[获取每个角色的IP]*************************************************************************************************************************************************************************************************************************************************
2019年10月23日星期三16:14:23+0200(0:00:00.043)0:00:00.043****
确定:[localhost]=>(项=管理)=>{
“msg:”用于角色管理的ip列表:[{'ip':'1.2.3.4','vlan':'900-CLOUD-DEV','role':'Management'}]
}
确定:[localhost]=>(项目=生产)=>{
“msg”:“用于角色生成的ip列表:[{'ip':'4.5.6.7','vlan':'901-CLOUD-DEV','role':'Production'}]”
}
确定:[localhost]=>(项=备份)=>{
“msg”:“用于角色备份的ip列表:[{'ip':'8.9.10.11','vlan':'902-CLOUD-DEV','role':'Backup'}]”
}
重演**************************************************************************************************************************************************************************************************************************************************************
localhost:ok=1已更改=0无法访问=0失败=0跳过=0已获救=0已忽略=0
普通json中的等效变量声明为:

[
  {
    "ip": "1.2.3.4",
    "vlan": "900 - CLOUD-DEV",
    "role": "Management"
  },
  {
    "ip": "4.5.6.7",
    "vlan": "901 - CLOUD-DEV",
    "role": "Production"
  },
  {
    "ip": "8.9.10.11",
    "vlan": "902 - CLOUD-DEV",
    "role": "Backup"
  }
]

如果您必须从外部字符串加载数据(例如加载文件…),您可以在playbook中使用

您是负责生成数据还是必须处理您得到的数据?因为1)它不是有效的json,所以这将很难解析2)该结构将更容易搜索,只需稍作修改。您好,我要求更改json文件,现在它有点不同,谢谢您的提示!!谢谢你的时间,伙计,我要求更改json,现在它与你写的内容类似。我仍然在为json_查询而斗争,但现在谢谢你!!
[
  {
    "ip": "1.2.3.4",
    "vlan": "900 - CLOUD-DEV",
    "role": "Management"
  },
  {
    "ip": "4.5.6.7",
    "vlan": "901 - CLOUD-DEV",
    "role": "Production"
  },
  {
    "ip": "8.9.10.11",
    "vlan": "902 - CLOUD-DEV",
    "role": "Backup"
  }
]