如何将替换 \" 替换为 '

Posted

技术标签:

【中文标题】如何将替换 \\" 替换为 \'【英文标题】: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。不幸的是,这就是我卡住的地方!

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

如何将\" 替换为'

    在我复制粘贴内容的文件中? 如果我收到此作为对某个 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,这更符合您的实际要求。 好的,确认这就是您正在寻找的内容意味着我应该能够为此添加答案... 【参考方案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 中不知何故丢失了

以上是关于如何将替换 \" 替换为 '的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数“t”替换为“className”?

Java:将 \" 替换为 " 和 \/ 替换为 /

用 php 将每个 font size="" 替换为 font-size: ;如何? [关闭]

如何将整个 HTMLElement 的文本替换为其他内容?

请问PHP中如何进行文本替换

Powershell:如何将字符串中的第一个“:”替换为“,”?