Python3中如何去除JSON dump生成的多余反斜杠?
问题解决:JSON写入文件出现大量转义反斜杠
原因分析
你接收的data本质是已序列化的JSON字符串(比如形如"{\"name\":\"xxx\",\"amount\":100}"的字符串)。直接用json.dump(data, f)写入时,json模块会把这个字符串当作普通字符串值处理,为了符合JSON格式规范,会自动对字符串内部的引号、特殊字符进行转义,最终文件里就会出现大量\。而你打印data时看不到反斜杠,是因为Python控制台会自动解析字符串的转义显示,实际字符串本身是带转义的。
解决办法
既然已经用json.loads(data)解析出了Python对象y,直接写入这个解析后的对象即可,不要写入原始的data字符串。
错误代码示例
@sio.on('donation') def handle_donation(data): y = json.loads(data) # 错误:直接dump字符串data,导致转义 with open('donate.json', 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4)
正确代码示例
import json @sio.on('donation') def handle_donation(data): # 解析为Python字典/列表对象 y = json.loads(data) # 写入解析后的对象,生成合法JSON with open('donate.json', 'w', encoding='utf-8') as f: json.dump(y, f, ensure_ascii=False, indent=4)
补充说明
如果不需要保留解析后的y,也可以直接解析后写入:
@sio.on('donation') def handle_donation(data): parsed_data = json.loads(data) with open('donate.json', 'w', encoding='utf-8') as f: json.dump(parsed_data, f, ensure_ascii=False, indent=4)
这样写入的文件就是标准的JSON结构,不会出现多余的转义反斜杠。
内容的提问来源于stack exchange,提问作者a7ums
相关产品推荐
相关产品推荐

