【问题标题】:json_query - Get object key of current nodejson_query - 获取当前节点的对象键
【发布时间】:2020-01-24 15:14:57
【问题描述】:

我正在尝试访问当前节点的对象键

pkgs:
  pkg1:
    package_description: xzy
    owner: node1
  pkg2:
    package_description: desc2
    owner: node2

我需要的是一个像这样的对象

- name: pkgs1
  package_description: xyz
  owner: node1
- name: pkg
  package_description: desc2
  owner: node2

这是我创建的查询,但不确定如何访问“密钥”

- debug:
    msg: "{{ clusters.json | json_query(qry) | flatten }}"
    verbosity: 2
  vars:
    qry: '[*].pkgs.*.{"package_description": package_description, "ower": owner, "name": ??}'

【问题讨论】:

    标签: ansible jmespath json-query


    【解决方案1】:

    下面的查询完成了这项工作

        - set_fact:
            pkgl: "{{ pkgs|
                      dict2items|
                      json_query('[].{name: key,
                                     package_description: value.package_description,
                                     owner: value.owner}') }}"
        - debug:
            var: pkgl
    

    给予

        "pkgl": [
            {
                "name": "pkg2", 
                "owner": "node2", 
                "package_description": "desc2"
            }, 
            {
                "name": "pkg1", 
                "owner": "node1", 
                "package_description": "xzy"
            }
        ]
    

    同样的结果给出了没有json_query的任务

        - set_fact:
            pkgl: "{{ pkgl|default([]) +
                      [{'name': item.key,
                        'package_description': item.value.package_description,
                        'owner': item.value.owner}] }}"
          loop: "{{ pkgs|dict2items }}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 2011-10-24
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多