如何使用Ansible从JSON中提取指定值?
如何用Ansible从JSON中提取指定值
错误原因分析
你当前遇到的报错,核心是两个问题:
- 变量名大小写不匹配:你通过
set_fact定义的变量是大写的Value,但debug任务里引用的是小写的value,Ansible变量是大小写敏感的; - 没有根据JSON的嵌套层级正确定位目标字段。
修正后的解决方案
先将JSON内容读取为结构化变量,再根据字段的嵌套路径提取值:
1. 读取JSON文件并转为结构化变量
- name: 读取JSON文件内容 set_fact: order_data: "{{ lookup('file', 'POST.json') | from_json }}"
这里将变量名改为order_data,更直观且避免大小写混淆。
2. 提取不同目标字段的示例
根据你提供的JSON结构,以下是几种常见值的提取方式:
提取instanceCharacteristics中的name(即VLAN)
- name: 提取VLAN的name值 debug: msg: "VLAN的name是: {{ order_data.fulfilmentOrderItems[0].instanceCharacteristics[0].name }}"
说明:fulfilmentOrderItems和instanceCharacteristics都是数组,用[0]取第一个元素。
提取orderLineId的value(即123456-10)
- name: 提取orderLineId的value值 debug: msg: "orderLineId的值是: {{ order_data.fulfilmentOrderItems[0].orderLineId.value }}"
提取orderId中的identifier.value(即1234567-96_11)
- name: 提取orderId的identifier值 debug: msg: "orderId的identifier值是: {{ order_data.orderId.identifier.value }}"
3. 遍历数组提取多组值(如果JSON中有多个条目)
如果fulfilmentOrderItems包含多个元素,可以用循环遍历所有条目:
- name: 遍历所有订单条目提取值 debug: msg: "订单行ID: {{ item.orderLineId.value }}, VLAN值: {{ item.instanceCharacteristics[0].value }}" loop: "{{ order_data.fulfilmentOrderItems }}"
额外调试技巧
如果不确定JSON的层级结构,可以先打印完整变量查看:
- name: 打印完整JSON数据结构 debug: var: order_data
内容的提问来源于stack exchange,提问作者Hari3090
相关产品推荐
相关产品推荐

