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

如何在Ansible中解析Splunk返回的JSON输出并生成列表

解决Ansible解析Splunk多行独立JSON响应的问题

Splunk返回的是JSON Lines格式(每行一个独立JSON对象),Ansible默认会把整个响应当作单个JSON解析,导致json_query无法正确提取字段。以下是具体解决步骤:

1. 调整uri模块配置,保留原始响应文本

在调用Splunk API时,禁用自动JSON解析,让Ansible返回原始的多行文本内容:

- name: 调用Splunk查询API
  uri:
    url: "https://your-splunk-host:8089/services/search/jobs/export"
    method: POST
    user: your_splunk_user
    password: your_splunk_pass
    force_basic_auth: yes
    return_content: yes
    json: no  # 关键:禁用自动JSON解析,保留原始文本
    body: |
      search index=your_target_index | fields title, id
    body_format: form-urlencoded
  register: splunk_raw_output

2. 将多行文本转换为标准JSON数组

通过Ansible过滤器把每行独立的JSON对象转换为标准数组结构:

- name: 处理JSON Lines为标准数组
  set_fact:
    my_list: "{{ splunk_raw_output.content.split('\n') | select('match', '^{.*}$') | map('from_json') | list }}"

各过滤器作用:

  • split('\n'):把多行文本拆分为每行一个元素的列表
  • select('match', '^{.*}$'):过滤空行和非JSON格式的行(避免Splunk返回的冗余日志行干扰)
  • map('from_json'):把每个字符串格式的JSON转换为JSON对象
  • list():将map对象转为标准列表,生成可被json_query解析的结构

3. 正常使用json_query提取字段

转换完成后,即可用json_query提取目标字段:

- name: 提取所有title字段
  debug:
    msg: "{{ my_list | json_query('[*].title') }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:15:52