You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible中如何简洁访问多层嵌套字典的动态键对应值?

报错根因

你最开始写的result.json.licences[0].license报错,本质是result.json.licences根本不是列表,是键为字符串ID的键值对(字典)结构,没有索引为0的元素,自然会报变量不存在。
你现在用的result.json.licences[result.json.licences|first].license能跑通,但重复写全路径确实累赘,下面是几种更简洁的写法:

简洁实现方式

1. 字典转列表后直接取值

用dict2items过滤器把字典转成标准键值对列表,直接取第一个元素的value字段就行,不用重复写长路径:

- name: Display Licence ID
  ansible.builtin.debug:
    var: (result.json.licences | dict2items).0.value.license

2. 用json_query直接匹配目标字段

不用管外层的随机ID键是什么,直接通配提取所有下层的license字段再取第一个:

- name: Display Licence ID
  ansible.builtin.debug:
    var: result.json.licences | json_query('*.license') | first

3. 提前提取为独立变量(后续多次调用最方便)

如果后面还有多个任务要用到这个license值,最省事的写法是先提前提取成短变量,后续直接调用就行:

- name: 提前提取license值
  ansible.builtin.set_fact:
    licence_val: "{{ result.json.licences | dict2items | map(attribute='value.license') | first }}"

- name: Display Licence ID
  ansible.builtin.debug:
    var: licence_val

注意:如果后续licences下可能出现多个授权条目,不要依赖first取第一个值,最好明确指定对应的键名取值,避免字典顺序变动导致取错内容。

内容的提问来源于stack exchange,提问作者Richard H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:01:04