【问题标题】:Trying to dump information to a json, but getting double backslashs试图将信息转储到 json,但得到双反斜杠
【发布时间】:2021-02-11 15:30:16
【问题描述】:

我在 MySQL 数据库中有一些信息存储,例如:AHmmgZq\n/+AH+G4

我们使用 API 得到它,所以当我在我的 python 中读取它时,我得到:AHmmgZq\\n/+AH+G4 反斜杠加倍!

现在我需要将它放入一个 JSON 文件中,如何删除多余的反斜杠?

编辑:让我展示我的完整代码:

json_dict = {
    "private_key": "AHmmgZq\\n/+AH+G4"
}

print(json_dict)
print(json_dict['private_key'])

with open(file_name, "w", encoding="utf-8") as f:
    json.dump(json_dict, f, ensure_ascii=False, indent=2)

在第一个打印中,我有双反斜杠,但在第二个打印中,只有一个。当我将它转储到 json 文件时,它给了我一倍。

【问题讨论】:

  • 当您打印字典时,您会得到它的 repr。当您打印内部键时,您会得到它的 str 表示。在 repr 中,python 显示了用于转义的反斜杠,但在字符串中它只是应用了转义。您正在使用该私钥向 api 发送请求吗?尝试从生成的 json 中读取密钥并发出请求。一切都应该正常。

标签: json python-3.x encoding


【解决方案1】:

"AHmmgZq\\n/+AH+G4"在python中等价于文字字符串"AHmmgZq\n/+AH+G4".print("AHmmgZq\\n/+AH+G4") => "AHmmgZq\n/+AH+G4"

\n是python中的换行符。所以要从字面上表示\n,它需要用\ 进行转义。我会先尝试按原样转换为 json,看看是否可行。

否则要删除多余的反斜杠:

string_to_json.replace("\\\\","\\")

记住\\ = 转义\ = \

但是在上面的字符串中,这对你没有帮助,因为 python 将"AHmmgZq\\n/+AH+G4" 读取为"AHmmgZq\n/+AH+G4",因此找不到双反斜杠。

【讨论】:

  • 是的,我已经意识到这一点,并尝试了替换,但没有成功。在您的代码中有一个 replace.replace,这是一个错误吗?
  • 道歉 - 修复了双重替换。你能解释一下你希望 json 的样子吗?你当前的输出给了你什么?
  • 我希望我的 json 看起来像:“AHmmgZq\n/+AH+G4”,但现在它有双反斜杠
  • 在Javascript中\也需要转义。这就是为什么您会看到双反斜杠。这就是字符串应该被格式化的方式。你不应该做任何事情
  • 我在问题中添加了新信息,我想你现在会看得更清楚
【解决方案2】:

解决我的问题是这样的:

string_to_json.replace("\\n","\n")

谢谢大家!

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 2019-03-18
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2021-11-16
    相关资源
    最近更新 更多