【问题标题】:Replace backslash with inverted comma '\"' in Python while reading JSON在读取 JSON 时用 Python 中的反斜杠替换反斜杠'\"'
【发布时间】:2020-08-24 02:02:30
【问题描述】:

在给定的字符串中,我试图替换一个反斜杠,然后是一个双引号,没有任何内容,但似乎没有任何效果。我也尝试过在 SO 上进行搜索,但是虽然有很多用于替换反斜杠和替换引号的解决方案,但我找不到一个可以同时替换两者的解决方案。这里我给出一个示例字符串。

sample_str = '{"source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>", "in_reply_to_status_id": null}'

我想把它修改成如下的字符串-

sample_str = '{"source": "<a href=http://twitter.com/download/iphone rel=nofollow>Twitter for iPhone</a>", "in_reply_to_status_id": null}'

所以我唯一要替换的是引号前面有反斜杠(而不是所有引号,如果我分别删除反斜杠和引号,这是可能的)。

我尝试了以下方法,但似乎都没有工作(也尝试了正则表达式,但没有运气!)。我确定我一定遗漏了一些非常明显的东西。

sample_str = sample_str.replace(r'\"', '')
sample_str = sample_str.replace('\\"', '')

我正在从推文的 JSON 转储中读取这些内容,并尝试将其解码为 JSON。但事实证明,正因为如此,JSON 库无法将其作为 Python 字典读取。我认为这应该由图书馆处理,但它似乎不起作用。因此,任何无需此替换即可为我提供 Python 字典的解决方案对我来说也可以(而且更可取)。

如果我遗漏了一些信息,请告诉我,我会补充。对此的任何帮助将不胜感激。

【问题讨论】:

  • 而不是试图解决它 - 你所拥有的是完全有效的 JSON。如果您直接将其输入到源文件中,请确保正确转义它:a = '{"source": "&lt;a href=\\"http://twitter.com/download/iphone\\" rel=\\"nofollow\\"&gt;Twitter for iPhone&lt;/a&gt;", "in_reply_to_status_id": null}'json.loads(a) 配合良好。

标签: python json string


【解决方案1】:

您需要通过添加 r' ' 将其表示为原始字符串。这在处理反溅 '\' 时很有用,因为原始字符串保留反溅“原样”。

例如

import json 

sample_str = r'{"source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>", "in_reply_to_status_id": null}'

js = json.loads(sample_str)
print(js)

【讨论】:

  • 感谢您的回答!我想我应该在我的问题中对此更加清楚 - 这是我拥有的原始文件中 JSON 的样子 - "{\"source\": \"&lt;a href=\\\"http://twitter.com/download/android\\\" rel=\\\"nofollow\\\"&gt;Twitter for Android&lt;/a&gt;\", \"in_reply_to_status_id\": null}"。现在当我把它放在一个变量中时,它工作正常。但是,在从文件中读取完全相同的行时,不会将其解析为 Python 字典(而是作为字符串读取,JSON 库不会生成错误)。我试图想办法解决这个问题。
  • 维克多,感谢您对此进行调查!这个问题现在似乎已经解决了,但这是一个奇怪的解决方案。从文件中读取时,我必须对 JSON 字符串进行两次解码,因为在第一个 loads 返回的字符串上执行了 loads,这给了我想要获取的字典。
猜你喜欢
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
相关资源
最近更新 更多