我正在使用Ansible从Bitbucket中提取JSON文件的内容。问题是内容是转义的JSON,所以我不能在变量中使用它或解析它,等等。下面是我从Bitbucket得到的一个例子:
{
"json": {
"lines": [
{
"text": " \"AWS\": {"
},
{
"text": " \"S3\": {"
},
{
"text": " \"Bucket\": \"my-s3-bucket\","
}
]
}
}
以下是我尝试过的:
json_file.json.lines | map(attribute='text') | join('\n') | from_json
或
json_file.json.lines | map(attribute='text') | join('\n') | to_json
在join()
之后(在from/to_json
之前),内容看起来像这样:
{\\n \"AWS\": {\\n \"S3\": {\\n \"Bucket\": \"my-s3-bucket\"\\n }\\n }\\n }
以上两个过滤器都不会返回可用的JSON。当我尝试访问JSON中的一个项目时,我会得到VARIABLE IS UNDEFINED
或Unexpected failure during module execution: Expecting property name enclosed in double quotes
。
那么我如何才能做到这一点呢?
1条答案
按热度按时间q3aa05251#
我看到两个问题。
输入不是有效的JSON
如果我们提取示例中的文本,我们不会得到有效的JSON文档。我们得到:
它本身就是一个JSON文档的片段。为了测试一个解决方案,我们至少需要以下等式:
过滤器无法生成有效的JSON
当你写:
你不能用换行符连接行。您正在使用文本双字符序列
\n
连接行。这会导致一个不是有效JSON的文档。最简单的解决方案是在
""
上加入。解决方案
考虑到以上两点,我们可以把这样的东西放在一起:
其产生作为输出: