如何将转义JSON转换为常规JSON或可用变量?(Ansible场景)
解决Ansible解析Bitbucket返回的转义JSON问题
问题分析
- Bitbucket返回的JSON中,
lines数组的每个text字段包含带转义双引号(\")的片段,拼接后这些转义字符会导致JSON解析失败 - 你提供的示例数据拼接后JSON语法不完整(缺少闭合的
}}}),这也是触发解析报错的关键原因之一
解决方案
按以下步骤处理数据即可正常解析:
- 替换转义引号:将每个
text字段里的\"替换为实际的双引号" - 拼接完整文本:把处理后的字段片段拼接成完整的JSON字符串
- 补全JSON语法:确保拼接后的JSON结构闭合完整(根据实际数据调整)
- 解析为可用变量:用
from_json过滤器将合法的JSON字符串转换为Ansible可访问的变量
具体Ansible过滤器代码
json_file.json.lines | map(attribute='text') | map('regex_replace', '\\\\"', '"') | join('\n') + '\n }\n }' | from_json
代码说明
map('regex_replace', '\\\\"', '"'):通过正则替换,把每个text中的转义引号\"转换为普通双引号"(正则中需双重转义)join('\n'):将处理后的行片段拼接成连续的字符串+ '\n }\n }':补充示例数据中缺失的闭合括号,让JSON语法合法(如果你的实际数据本身结构完整,可删除此部分)from_json:把处理后的合法JSON字符串解析为可直接访问的变量对象
验证使用
解析完成后,即可正常访问JSON内的字段,例如:
{{ processed_json.AWS.S3.Bucket }}
内容的提问来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

