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

Ansible返回AnsibleUnicode而非JSON,无法用json_query过滤

解决Ansible中json_query无法过滤AnsibleUnicode类型数据的问题

问题根源

你的RPN.stdout是AnsibleUnicode类型的半结构化字符串,并非完整合法的JSON对象(仅包含members字段的键值对,缺少外层大括号),而json_query仅能作用于已解析的JSON字典/列表,直接使用会返回null。

解决步骤

  1. 补全合法JSON结构:将原字符串拼接为完整的JSON格式(添加外层{})
  2. 解析为JSON对象:用from_json过滤器将字符串转换为Ansible可处理的字典类型
  3. 执行json_query过滤:针对解析后的对象提取ip字段

修改后的完整Playbook示例

- hosts: localhost
  gather_facts: false
  vars:
   - RPN:
      stdout:  >-
              "members": [
              {
                "id": 0,
                "ip": "x.x.x.x",
                "owner": "buzut",
                "private_ip": "10.91.154.39",
                "speed": 100,
                "status": "active"
              }
              ]

  tasks:
    - name: 解析字符串为JSON并提取IP
      debug:
        msg: "{{ ('{' ~ RPN.stdout ~ '}') | from_json | json_query('members[*].ip') }}"

替代方案(直接用Ansible原生索引)

如果不想依赖json_query,也可以直接通过字典索引提取目标值:

- name: 直接提取单个IP
  debug:
    msg: "{{ (( '{' ~ RPN.stdout ~ '}' ) | from_json).members[0].ip }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:41