如何将替换 \" 替换为 '
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 中不知何故丢失了以上是关于如何将替换 \" 替换为 '的主要内容,如果未能解决你的问题,请参考以下文章