【发布时间】:2017-06-07 20:02:26
【问题描述】:
由于转义字符,以下代码尝试将字符串解析为字典时遇到问题,我将发布一个示例:
string = """ {"key" : "value 'others' = \"one \" "} """
json.loads(string)
json 无法加载,因为它得到了带有太多双引号的以下字符串:
{"key" : "value 'others' = "one " "}
其实我不需要加载 json ,我可以简单地做一个 eval :
ast.literal_eval(string)
到目前为止一切顺利,问题是我无法使用替换删除转义的双引号字符串(例如: s.replace('\"','') ),因此,有一些低级字符串操作要实现我想要什么?我想要一个有效的 json 语法:
{"key" : "value 'others' = one "}
或者能够让python不删除反斜杠:
{"key" : "value 'others' = \"one\" "}
正如弗朗索瓦所说,这可以通过原始字符串来实现:
rawstring = r"my string \""
我的问题与已经放入非原始字符串变量的字符串有关,因此我需要某种方法将该非原始字符串重新转换为原始字符串,以便使用 json 或 ast 解析为字典数据结构。文字评估
【问题讨论】:
-
您不想额外转义引号,以便 JSON 将其视为:
{"key" : "value 'others' = \"one \" "}。现在您将丢弃信息。 -
嗨,Willem,事实上,它在来自 read 的字符串中以这种方式转义: {"key" : "value 'others' = \"one \" "} 。这里的问题是字符串用反斜杠解释双引号,因为它被定义为普通字符串
-
原始字符串与常规字符串没有不同的类型。为了方便起见,这只是 python 代码中的不同文字符号。一旦字符串文字被解析,它就与任何其他字符串没有什么不同。这类似于 python 允许您使用双引号或单引号声明字符串文字的方式。
-
你是如何加载字符串的?根据python,您可以在字符串
s上使用repr(s)来查看字符串的样子。如果 json 数据中的任何字符串文字包含内部"字符,则如果要解析 json,则必须正确转义这些字符。 -
这解释了原始字符串:stackoverflow.com/questions/2081640/…
标签: python string replace quotes