如何选择列表中的一个元素

时间:2018-01-23 16:27:26

标签: ansible jinja2

我需要拆分文件名和扩展名:foo.bar

$('[data-name]').each(function(){
  var name = $(this).attr('data-name');
  var color =$(this).attr('data-clr');
  $(this).text(name + '/' + color);
});

使用splitext我得到一个包含2个元素的列表。

  - name: split file
    set_fact:
      myvar: "{{ myfile | splitext | to_json }}"

我必须使用第一个,但我不能:

ok: [localhost] => {
    "msg": [
        "foo",
        ".bar"
    ]
}
  - name: test
    debug:
      msg="{{ myvar[0] }}"

出了什么问题?

1 个答案:

答案 0 :(得分:2)

to_json过滤器替换为list过滤器:

- name: split file
  set_fact:
    myvar: "{{ myfile | splitext | list }}"

to_json生成一个JSON字符串(["foo", ".bar"]),因为字符串在内部表示为字符列表,myvar[0]引用其第一个字符([)。

debug输出在此示例中令人困惑,因为msg将被模板化并显示,就像它是一个列表一样。

您始终可以使用myvar | type_debug检查类型,对于您将看到unicode(或AnsibleUnicode)的字符串。