如何用Ansible的json_query提取JSON文档中的指定值?
Ansible中用JMESPath提取JSON字符串里的UUID值解决方案
问题核心:你通过shell模块获取的stdout是JSON格式的字符串,而非已解析的JSON对象,直接用[].stdout[].value查询自然返回null,必须先将字符串转为JSON对象再提取字段。
具体解决步骤:
- 第一步:确保shell任务的结果已注册,比如
register: uuid_result - 第二步:使用Ansible的
from_json过滤器将stdout字符串解析为JSON对象 - 第三步:用
json_query或直接通过点符号访问目标字段value
示例代码:
- name: 执行shell命令获取JSON输出 shell: "生成含UUID的JSON输出的命令" register: uuid_result - name: 提取UUID值(方式1:json_query) debug: msg: "{{ uuid_result.stdout | from_json | json_query('value') }}" - name: 提取UUID值(方式2:直接点访问,更简洁) debug: msg: "{{ (uuid_result.stdout | from_json).value }}"
如果你的stdout_lines是多行输出,仅某一行是目标JSON,只需先定位对应行再解析:
msg: "{{ uuid_result.stdout_lines[0] | from_json | json_query('value') }}"
内容的提问来源于stack exchange,提问作者avggeek
相关产品推荐
相关产品推荐

