gpt4 book ai didi

ansible - 如何使用 json_query 过滤器提取所有等于某个值的项目

转载 作者:行者123 更新时间:2023-12-02 18:58:30 30 4
gpt4 key购买 nike

这是我的 json 输出:

{
"kind": [
{
"inventory": "",
"inventory_sources": "",
"job_templates": "",
"workflow_job_templates": "104"
},
{
"inventory": "",
"inventory_sources": "",
"job_templates": "114",
"workflow_job_templates": ""
},
{
"inventory": "24",
"inventory_sources": "",
"job_templates": "",
"workflow_job_templates": ""
},
{
"inventory": "",
"inventory_sources": "108",
"job_templates": "",
"workflow_job_templates": ""
}
]
}

我想显示包含特定值的所有项目名称。例如,对于搜索值 104,我想获取键名称 workflow_job_templates

我测试了一些语法但没有成功:

    - debug: 
msg: "104 is {{kind|json_query(query)}}"
vars:
query: "[?*==`104`].workflow_job_templates"

我知道这是错误的,但有人可以告诉我他自己会怎么做吗?

最佳答案

json_query 可能是您的解决方案等式的一部分,但这里实际上不需要。

下面这段代码的解释:

  • dict2items 过滤器应用于列表中的每个元素。这会将每个映射转换为 {key: "key", value: "value"} 对列表
  • 展平给定的列表,以便我们将所有这些元素放到一个顶层
  • 仅选择值为“104”的元素
  • 提取列表中每个元素的key属性
  • 使该列表具有唯一性并对其进行排序。
    - name: Display all element having a value of 104
debug:
msg: "{{ kind | map('dict2items') | flatten
| selectattr('value', '==', '104')
| map(attribute='key') | unique | sort }}"

请注意,如果相同的键名称具有不同的值,但其中一个是“104”,则此解决方案将为您提供结果。根据您的上述数据,结果是:

TASK [Display all element having a value of 104] ***************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"workflow_job_templates"
]
}

关于ansible - 如何使用 json_query 过滤器提取所有等于某个值的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65903446/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com