英文:
Reducing the number of keys in a list of dictionaries
问题
"json": {
    "result_count": 4,
    "results": [
        {
            "_last_sync_time": 1678118608741,
            "display_name": "MyServerName1"
        },
        {
            "_last_sync_time": 1678118609865,
            "display_name": "MyServerName2"
        }
    ]
}
英文:
I have a list of 4 dictionaries with more data that I need, I am trying to display only 2 keys ("_last_sync_time" and "display_name") from the dictionaries but am unable to.
'json' is a dictionary and 'results' is the list of dictionaries that I need to grab only selected data from. Here is an example of my original data (there are 4 elements in the results list in real life).
"json": {
    "result_count": 4,
    "results": [
        {
            "_last_sync_time": 1678118608741,
            "cm_local_id": "host-29",
            "display_name": "MyServerName1",
            "external_id": "xxxxxxxx-5c6f-41f7-b9a1-783e45xxxxxx:host-29",
            "hardware_id": "xxxxxxa4e601d71c4a51a56cf5xxxxxx",
            "ip_addresses": [
                "10.x.x.1",
                "10.x.x.2"
            ],
            "node_type": "HostNode",
            "origin_id": "xxxxxxxx-5c6f-41f7-b9a1-783e45xxxxxx",
            "os_type": "ESXI",
            "os_version": "7.0.3",
            "resource_type": "DiscoveredNode",
            "stateless": false
        },
        {
            "_last_sync_time": 1678118609865,
            "cm_local_id": "host-30",
            "display_name": "MyServerName2",
            "external_id": "xxxxxxxx-6d7a-52a8-c0b2-894f56xxxxxx:host-30",
            "hardware_id": "xxxxxxa5f712e82d5b62b67da6xxxxxx",
            "ip_addresses": [
                "10.x.x.3",
                "10.x.x.4"
            ],
            "node_type": "HostNode",
            "origin_id": "xxxxxxxx-6d7a-52a8-c0b2-894f56xxxxxx",
            "os_type": "ESXI",
            "os_version": "7.0.3",
            "resource_type": "DiscoveredNode",
            "stateless": false
        }
    ]
}
I have tried using loop with map and selectattr but failed to get what I need i.e. the below
"json": {
    "result_count": 4,
    "results": [
        {
            "_last_sync_time": 1678118608741,
            "display_name": "MyServerName1"
        },
        {
            "_last_sync_time": 1678118609865,
            "display_name": "MyServerName2"
        }
    ]
}
答案1
得分: 0
- name: 尝试满足 OP 的要求
  vars:
    vars:
      query: >-
        {
          "result_count": result_count, 
          "results": results[].{
            "_last_sync_time": _last_sync_time, 
            "display_name": display_name
          }
        }
      ansible.builtin.debug:
        var: json | json_query(query)
英文:
Here's one way to do it with json_query:
- name: try to fulfill OP requirement
  vars:
    vars:
      query: >-
        {
          "result_count": result_count, 
          "results": results[].{
            "_last_sync_time": _last_sync_time, 
            "display_name": display_name
          }
        }
      ansible.builtin.debug:
        var: json | json_query(query)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论