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

Ansible Jinja2模板如何将指定字符串拆分转换为可调用的键值对字典

实现方案

你可以直接通过Jinja2内置的过滤器链完成字符串到字典列表的转换,不需要额外自定义插件,具体操作步骤如下:

步骤1:定义原始字符串变量

在Ansible playbook中先定义你拿到的原始学生字符串:

vars:
  raw_student_str: "studId=ValueA,studName=valueB;studId=ValueC,studName=ValueD"

步骤2:转换为字典列表

通过set_fact结合过滤器链完成格式转换:

- name: 处理学生字符串为可遍历的字典列表
  set_fact:
    student_list: >-
      {{ 
        raw_student_str.split(';') 
        | map('split', ',') 
        | map('map', 'split', '=') 
        | map('items2dict') 
        | list 
      }}

过滤器链逻辑说明:

  • 先按;分割原始字符串,得到每个学生的独立属性段
  • 对每个学生属性段按,分割,得到单条key=value格式的属性
  • 对每条属性按=分割为键、值两个元素
  • 把每个学生的键值对集合转换为字典
  • 最后把所有学生字典组装为列表

如果你使用的是Ansible 2.9及更早版本,没有内置items2dict过滤器,可以用下面的写法替换转换逻辑:

- name: 兼容旧版本Ansible的转换逻辑
  set_fact:
    student_list: >-
      {% set result = [] %}
      {% for student_segment in raw_student_str.split(';') %}
        {% set student_dict = {} %}
        {% for kv in student_segment.split(',') %}
          {% set key, val = kv.split('=', 1) %}
          {% set _ = student_dict.update({key: val}) %}
        {% endfor %}
        {% set _ = result.append(student_dict) %}
      {% endfor %}
      {{ result }}

步骤3:在Jinja2模板中遍历使用

模板内容直接按你预期的写法即可:

{% for item in student_list %}
student id={{ item.studId }}
student name= {{ item.studName }}
{% endfor %}

渲染后输出效果和你要求的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:03