首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible:从复杂的JSON数据结构中提取字典

Ansible:从复杂的JSON数据结构中提取字典
EN

Stack Overflow用户
提问于 2022-03-03 21:04:47
回答 1查看 58关注 0票数 0
代码语言:javascript
复制
{
"vmware_dc": {
    "changed": false,
    "msg": "All items completed",
    "results": [
        {
            "ansible_loop_var": "item",
            "changed": false,
            "datacenter_info": [
                {
                    "config_status": "gray",
                    "moid": "datacenter-1146",
                    "name": "dc-1",
                    "overall_status": "gray"
                }
            ],
            "failed": false,
            "invocation": {
                "module_args": {
                    "datacenter": null,
                    "hostname": "vc-001",
                    "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                    "port": 443,
                    "properties": null,
                    "proxy_host": null,
                    "proxy_port": null,
                    "schema": "summary",
                    "show_tag": false,
                    "username": "",
                    "validate_certs": false
                }
            },
            "item": "vc-001"
        },
        {
            "ansible_loop_var": "item",
            "changed": false,
            "datacenter_info": [
                {
                    "config_status": "gray",
                    "moid": "datacenter-424",
                    "name": "dc-2",
                    "overall_status": "gray"
                },
                {
                    "config_status": "gray",
                    "moid": "datacenter-2",
                    "name": "dc-3",
                    "overall_status": "gray"
                }
            ],
            "failed": false,
            "invocation": {
                "module_args": {
                    "datacenter": null,
                    "hostname": "vc-002",
                    "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                    "port": 443,
                    "properties": null,
                    "proxy_host": null,
                    "proxy_port": null,
                    "schema": "summary",
                    "show_tag": false,
                    "username": "",
                    "validate_certs": false
                }
            },
            "item": "vc-002"
        }
    ]
}

}

请参阅上面的JSON结果。我希望有人能帮我。我应该采取两个字段,一个项目和datacenter_info.name,我可以得到单独的值。我不知道如何创建字典,因为我有2个条目和3个datacenter_info.name

代码语言:javascript
复制
enter - name: Set all_items
  set_fact:
    all_items: "{{ vmware_dc_info.results | flatten | map(attribute='item) | flatten }}"

- name: debug all_items
  debug:
    var: all_items

    {
"all_items": [
    "vc-001",
    "vc-002"
]

- name: Set all dc
  set_fact:
    all_dc: "{{ vmware_dc_info.results | flatten | map(attribute='datacenter_info') | flatten | map(attribute='name') | flatten }}"

- name: debug all_dc
  debug:
    var: all_dc
    


"all_dc": [
    "dc-1",
    "dc-2",
    "dc-3"

字典应该如下所示

代码语言:javascript
复制
vc-001: dc-1
vc-002: dc-2
vc-002: dc-3

有可能吗?你认为如何?

用下面的代码解析

代码语言:javascript
复制
    - name: Set fact
  set_fact:
    dc_list: "{{ dc_list | default([]) + [{'vcenter':  item[0].item, 'dc': item[1].name}] }}"
  with_subelements:
    - "{{ vmware_dc_info.results }}"
    - datacenter_info
  loop_control:
    label: "{{ item[0].item }}"

- name: Debug
  debug:
    var: dc_list
EN

回答 1

Stack Overflow用户

发布于 2022-03-04 07:33:22

例如

代码语言:javascript
复制
    - set_fact:
        hostnames: "{{ hostnames|d({})|combine({item: names}) }}"
      loop: "{{ vmware_dc.results|map(attribute='item')|list }}"
      vars:
        _item: "{{ vmware_dc.results|selectattr('item', '==', item) }}"
        names: "{{ _item.0.datacenter_info|map(attribute='name')|list }}"

给出预期的结果。

代码语言:javascript
复制
hostnames:
  vc-001:
    - dc-1
  vc-002:
    - dc-2
    - dc-3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71343800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档