如何将未知长度的嵌套列表合并为无嵌套的一维列表?
解决嵌套列表转一维列表的方法
针对你用json_query得到动态嵌套列表的场景,有两种简洁的实现方式:
方法1:使用Ansible内置的flatten过滤器
Ansible的Jinja2过滤器flatten可以直接将任意层级的嵌套列表展开为一维列表,完全适配动态长度的场景,不需要固定索引。用法非常简单:
- name: 展开嵌套列表 debug: msg: "{{ my_list | flatten }}"
针对你的示例my_list: [ [1,2],[3,4],[5,6] ],执行后会直接得到[1,2,3,4,5,6]。如果嵌套层级更深(比如三维列表),还可以通过flatten(n)指定展开的层级,flatten(1)只展开最外层嵌套,默认flatten()会展开所有层级。
方法2:在json_query中直接展开
如果希望在解析阶段就直接得到一维列表,不用后续处理,可以利用JSONPath的展开语法。假设你的原始数据结构类似:
raw_data: items: [ [1,2],[3,4],[5,6] ]
那么在json_query中使用[]运算符直接展开子列表:
- name: 解析时直接得到一维列表 debug: msg: "{{ raw_data | json_query('items[]') }}"
这样json_query会直接返回[1,2,3,4,5,6],省去后续的扁平化步骤。
内容的提问来源于stack exchange,提问作者Mint
相关产品推荐
相关产品推荐

