Ansible json_query过滤时丢失目标键值对的问题咨询
Ansible JSON查询异常:subthing0无法被正确获取
原始API返回数据
{ "records": [ { "data0": "string", "data1": { "internal0": "string", "internal1": { "subthing0": "string", "subthing1": { "otherstuff": { "evenmore stuff": "string" } } } } } ] }
(注:补全了原始示例遗漏的外层大括号)
问题现象
- 执行以下查询时返回空结果:
"{{ set_var.content | from_json | json_query('records[*].data1.internal1.subthing0') }}" - 执行以下查询时,仅显示
subthing1的所有键值对,subthing0完全缺失:{{ set_var.content | from_json | json_query('records[*].data1.internal1') }} - 只有直接查询
records层级时,才能看到subthing0的内容
排查方向与解决办法
- 键名匹配问题:json_query对键名的大小写、拼写严格敏感。检查API返回的实际JSON中,
subthing0的键名是否和查询语句完全一致(比如是否存在SubThing0这类大小写差异),键名不匹配会直接导致查询空结果。 - 值类型或空值问题:如果
subthing0的实际值是null、空字符串,或是无法被json_query正常解析的特殊类型,在查询internal1层级时可能被自动隐藏。可以通过打印完整格式化JSON确认:{{ set_var.content | from_json | to_nice_json(indent=2) }} - 分步验证查询路径:拆分查询步骤定位问题节点:
- 先验证
records[*].data1是否返回正确内容 - 再验证
records[*].data1.internal1的返回结果,确认subthing0是否真的存在于该层级 - 尝试用索引替代通配符:
records[0].data1.internal1.subthing0,看是否能获取到值
- 先验证
- 变量完整性检查:确认
set_var.content在传递过程中未被其他任务修改或过滤。添加调试任务输出原始解析后的JSON:- name: 检查原始解析后的JSON数据 debug: var: set_var.content | from_json
内容的提问来源于stack exchange,提问作者maskeda
相关产品推荐
相关产品推荐

