在 BASH 中,我可以通过 jq 将 JSON 存储到环境变量中:
export FOO=$(curl ... | jq -Rs)
现在,如果我将其加载到 python 中:
bar=os.environ["FOO"]
bar
会有类似: 的内容{\\"this\\":\\"that\\"}
,这是使用以下内容加载时出现的问题json
:
json.loads(bar) # error
我已经尝试了一些方法,包括repr
、rf'{os.environ["FOO"]}'
等等,但似乎没有一种内部管理的方法来删除额外的斜杠。
如何通过字符串函数删除多余的斜杠?我不想简单地用单个斜杠替换它们,因为将来我可能不得不再次触及该代码。
添加
-r
标志以作为原始文本输出jq
。下面是一个使用 echo 给出转义结果的示例:但是添加后
-r
得到的结果仍然是 JSON 格式,没有所有转义引号:这是Python可以解析的。
我试图重建这个:
这是 bash 中存储的内容:
然后在 python shell 中:
因此,基本上 json.loads() 不会为您获得的 Python 对象的类型提供任何保证,但它会尝试反序列化您提供的任何内容,因此嵌套的反序列化可以完成这项工作。但是,当然,如果您能够确保环境首先包含正确格式的数据(正如其他答案所建议的那样),那就更好了。