如何在Python中去除JSON值中的转义字符?
解决JSON中转义双引号去除的问题
核心思路
你遇到的问题是JSON中某个字段的值被额外的双引号包裹(转义后表现为\"escapeddata\"),需要精准去除这些首尾的双引号。直接用json.loads只会解析JSON结构,不会处理值的内容;盲目用replace容易破坏正常的JSON转义逻辑,所以要分两步处理:先解析为Python对象,再针对性清理值的首尾引号,最后转回JSON。
方法一:针对已知特定键处理
如果明确知道需要处理的键,直接定位后清理即可:
import json # 原始JSON字符串 raw_json = '{"key":{"keyinner1":"\"escapeddata\"","keyinner2":"text"}}' # 解析为Python字典 data = json.loads(raw_json) # 去除目标字段值的首尾双引号 data["key"]["keyinner1"] = data["key"]["keyinner1"].strip('"') # 转回JSON字符串 processed_json = json.dumps(data) print(processed_json) # 输出结果:{"key": {"keyinner1": "escapeddata", "keyinner2": "text"}}
方法二:递归处理所有可能的字段
如果不确定哪些字段有这类问题,或者需要批量处理嵌套结构中的所有符合条件的字段,可以用递归函数遍历清理:
import json def clean_surrounding_quotes(value): if isinstance(value, str): # 仅当字符串首尾都是双引号时才去除 if value.startswith('"') and value.endswith('"'): return value.strip('"') return value elif isinstance(value, dict): return {k: clean_surrounding_quotes(v) for k, v in value.items()} elif isinstance(value, list): return [clean_surrounding_quotes(item) for item in value] else: return value # 示例含多个需要处理的字段的JSON raw_json = '{"key":{"keyinner1":"\"escapeddata\"","keyinner2":"text","nested":{"sub_key":"\"another_escaped\""}}}' data = json.loads(raw_json) processed_data = clean_surrounding_quotes(data) processed_json = json.dumps(processed_data) print(processed_json) # 输出结果:{"key": {"keyinner1": "escapeddata", "keyinner2": "text", "nested": {"sub_key": "another_escaped"}}}
为什么之前的方法无效
json.loads的作用是将JSON字符串解析为Python对象,不会自动修改字段值的内容,那些首尾双引号是值的一部分,所以解析后依然存在。- 直接用
replace处理原始JSON字符串时,比如replace('\\"', '')会把所有转义双引号去掉,可能破坏其他正常的转义逻辑(比如字段值内部的\"),导致JSON结构损坏或处理不精准。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

