json_query
是 Ansible 中一个强大的过滤器,用于从复杂的数据结构中提取数据。它基于 JMESPath 查询语言,允许你使用类似 JSONPath 的语法来查询和转换 JSON 数据。
当使用 json_query
处理字典值时,有时会遇到返回结果中包含额外字符(如 u'
前缀或多余的引号)的情况。这通常是由于 Python 和 JMESPath 之间的数据类型转换问题导致的。
u'
前缀是 Python 2 中表示 Unicode 字符串的方式,虽然在 Python 3 中不再需要,但在某些情况下仍会出现。json_query
在处理数据时可能会改变原始数据的类型表示。to_json
过滤器- debug:
msg: "{{ your_data | json_query('your.query') | to_json }}"
from_json
过滤器如果结果是字符串形式的 JSON:
- debug:
msg: "{{ (your_data | json_query('your.query')) | from_json }}"
如果可能,避免使用 json_query
而直接访问字典:
- debug:
msg: "{{ your_data['key']['subkey'] }}"
- set_fact:
clean_result: "{{ (your_data | json_query('your.query')) | string }}"
假设有以下数据结构:
vars:
users:
- name: Alice
details: {"age": 25, "city": "New York"}
- name: Bob
details: {"age": 30, "city": "London"}
- debug:
msg: "{{ users | json_query('[].details.city') }}"
可能会输出类似:[u'New York', u'London']
- debug:
msg: "{{ users | json_query('[].details.city') | map('string') | list }}"
json_query
通常用于:
jmespath
Python 包json_query
行为更加稳定通过上述方法,你应该能够解决 json_query
添加额外字符的问题,并获取干净的数据输出。
没有搜到相关的文章