【问题标题】:How can I replace replace \" with '如何将替换 \" 替换为 '
【发布时间】:2020-12-30 20:41:59
【问题描述】:

我有以下内容:

{

"z":"[{\"ItemId\":\"1234\",\"a\":\"1234\",\"b\":\"4567\",\"c\":\"d\"}]"

}

这是我从某个 API 获得的 json 响应的一部分。我需要用's 替换\"s。不幸的是,这就是我卡住的地方!

我得到的大多数答案只是将\ 替换为""" ",所以这对我没有帮助。所以我的问题如下:

如何将\" 替换为'

  1. 在我复制粘贴内容的文件中?
  2. 如果我收到此作为对某个 API 调用的响应?

我尝试了以下方法来替换文件中的内容,但显然我只是将"s 替换为'

  with open(file, "r") as f:
    content = f.read()
    new_content = content.replace("\"", "'")
    with open(file, "w") as new_file:
        new_file.write(new_content)

【问题讨论】:

  • 嗯? 's 在 JSON 中无效。
  • 您真的希望您的文件包含对象的 Python repr(),而不是 JSON 表示吗?有更简单的方法可以做到这一点。
  • 这取决于 JSON 究竟包含什么。如果 JSON 中的 \" 仅表示引号字符,这更有可能,那么将其打印为 \" 是 python 可能会自动执行的操作,替换它只会执行 content.replace('"', "'") (使用 '其他'引号)。另一方面,如果它实际上是两个字符,那么您希望通过编写文字反斜杠和引号 '\\"' 来替换反斜杠和引号的组合
  • myobject["z"] = json.loads(myobject["z"]) 会用 literal object 代替您的密钥; myobject["z"] = repr(json.loads(myobject["z"])) 将用 Python repr 替换 JSON,这更符合您的实际要求。
  • 好的,确认这就是您正在寻找的内容意味着我应该能够为此添加答案...

标签: python json string replace html-escape-characters


【解决方案1】:

如果您尝试将每个值从 JSON 字符串转换为 Python repr() 字符串,同时将包装器格式保持为 JSON,则可能如下所示:

with open(filename, "r") as old_file:
  old_content = json.load(old_file)
  new_content = {k: repr(json.loads(v)) for k, v in old_content.items()}
  with open(filename, "w") as new_file:
    json.dump(new_content, new_file)

如果您的旧文件包含:

{"z":"[{\"ItemId\":\"1234\",\"a\":\"1234\",\"b\":\"4567\",\"c\":\"d\"}]"}

...新文件将包含:

{"z": "[{'ItemId': '1234', 'a': '1234', 'b': '4567', 'c': 'd'}]"}

请注意,在这个新文件中,内部字段现在是 Python 格式,而不是 JSON 格式; JSON 解析器无法再解析它们。通常,我会建议做一些不同的事情,例如:

with open(filename, "r") as old_file:
  old_content = json.load(old_file)
  new_content = {k: json.loads(v) for k, v in old_content.items()}
  with open(filename, "w") as new_file:
    json.dump(new_content, new_file)

...这将产生一个输出文件:

{"z": [{"ItemId": "1234", "a": "1234", "b": "4567", "c": "d"}]}

...使用以 JSON 为中心的标准工具(jq 等)既易于阅读又易于处理。

【讨论】:

  • 嗨@Charles Duffy。这是我是个白痴,不知道 json 模块。感谢您将我推向正确的方向!
【解决方案2】:

使用json 模块,您可以转储数据,然后使用以下命令加载:

import json

data = {

    "z": "[{\"ItemId\":\"1234\",\"a\":\"1234\",\"b\":\"4567\",\"c\":\"d\"}]"

}


g = json.dumps(data)

c = json.loads(data)

print(c)

print(str(c).replace("\"","'"))

输出:

{'z': '[{"ItemId":"1234","a":"1234","b":"4567","c":"d"}]'}

{'z': '[{'ItemId':'1234','a':'1234','b':'4567','c':'d'}]'}

【讨论】:

  • AFAICT,OP 要求 {"z": "[{'ItemID':'1234','a':'1234','b':'4567','c':'d'}]"} - 替换 值内的引号,同时保持包装格式 JSON。
  • 嗯,我认为这在 cmets 中不知何故丢失了
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 2015-01-14
  • 2018-06-04
  • 1970-01-01
  • 2011-08-05
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多