Python 如何替换\“;与';
我有以下内容:Python 如何替换\“;与';,python,json,string,replace,html-escape-characters,Python,Json,String,Replace,Html Escape Characters,我有以下内容: { "z":"[{\"ItemId\":\"1234\",\"a\":\"1234\",\"b\":\"4567\",\"c\":\"d\"}]" } 这是我从某个API获得的json响应的一部分。我需要将\“s替换为's。不幸的是,这就是我被卡住的地方 我得到的大多数答案只是
{
"z":"[{\"ItemId\":\"1234\",\"a\":\"1234\",\"b\":\"4567\",\"c\":\"d\"}]"
}
这是我从某个API获得的json响应的一部分。我需要将\“
s替换为'
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)
“
替换为”
:
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)
使用
json
模块,您可以转储数据,然后使用以下方法加载数据:
导入json
数据={
“z:“[{\“ItemId\”:“1234\”,“a\”:“1234\”,“b\”:“4567\”,“c\”:“d\”]
}
g=json.dumps(数据)
c=json.loads(数据)
印刷品(c)
打印(str(c).替换(“\”,“”))
输出:
{'z': '[{"ItemId":"1234","a":"1234","b":"4567","c":"d"}]'}
{'z': '[{'ItemId':'1234','a':'1234','b':'4567','c':'d'}]'}
如果您试图将每个值从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
等)既易于阅读又易于处理<代码>“s在JSON中无效。是否确实希望文件包含对象的Pythonrepr()
,而不是JSON表示?有更简单的方法可以做到这一点,这取决于JSON到底包含什么。如果JSON中的\“
仅表示引号字符(更可能是引号字符),则python可能会自动将其打印为\”
,替换它只会执行内容。替换(“,””)
(使用“其他”引号)。另一方面,如果它实际上是两个字符,那么您希望通过编写一个文字反斜杠和引号来替换反斜杠和引号的组合。'\\''myobject[“z”]=json。加载(myobject[“z”])
会将文字对象放在键的位置myobject[“z”]=repr(json.loads(myobject[“z”])
将用Python repr替换json,这更符合您的实际要求。这完全奏效了!我现在确实觉得自己像个白痴。我的意图是先获取“内容”,然后获取json。加载(内容),然后使用[{a:i[“a”],“b:i[“b”]}为blah中的i查找特定键的值。AFAICT,OP要求在保留包装格式的同时替换值内的引号。json,我想我在查尔斯·达菲的评论中不知怎么迷失了方向。这是因为我是个白痴,不知道json模块。谢谢你把我推向正确的方向!