Python中面向JSON处理的字符串转原始字符串 解决json解析报错
报错核心原因
- 代码靠手动字符串拼接拼出JSON结构,完全没有遵循JSON的转义规则处理文本里的特殊字符,拼出来的字符串本身就不符合JSON语法,自然会在
json.loads的时候报“缺失逗号分隔符”的错误。这种手动拼JSON的写法天生就不稳定,只要输入文本里出现双引号、换行、反斜杠这类特殊内容,必然会崩。 - 后续绕的
拼字符串→json.loads转字典→str(字典)写文件的流程完全是无效冗余:哪怕解析不报错,写进文件的是Python字典的原生字符串表示,根本不是合规的可解析JSON,更达不到预期的缩进排版效果。 - 直接用
input当变量名会覆盖Python内置的input函数,属于容易埋坑的坏实践。
正确的实现逻辑
根本不需要手动拼任何JSON字符串,直接用Python自带的json模块做序列化就完事,模块会自动处理所有转义、格式排版的问题:
- 先导入json依赖
- 把要存储的内容直接构造为Python字典
- 用
json.dump方法把字典直接写入目标文件,模块会自动输出标准格式的JSON
可直接运行的修正代码:
import json # 避免覆盖内置函数名,原input变量改名为text_content text_content = "You can check it out here. https://www.youtube.com/watch?v=Ay1gCPAUnxo&t=83s I'll send $20 in bitclout to the first 50 people that follow instructions at end of the video. This is revolutionary. Let's hope it works! <3Building it. What's up y'all" def createJsonText(input_text): target = {"text": input_text} # 用with上下文管理器自动管理文件资源,不需要手动close # ensure_ascii=False 保留原文本的字符不转义为unicode编码 # indent=2 实现两层缩进的JSON排版,和预期格式完全一致 with open("tone.json", "w", encoding="utf-8") as f: json.dump(target, f, ensure_ascii=False, indent=2) createJsonText(text_content)
修正后的效果
- 生成的
tone.json内容完全匹配预期格式,不会出现任何JSON语法错误 - 不管输入的文本里包含什么特殊字符(双引号、换行、特殊符号),模块都会自动完成正确转义,不会再触发解析报错
- 写入文件的是标准合规的JSON格式,不是Python字典的字符串表示
提醒:原来代码里用的是追加写入模式
"a",如果反复运行会往同一个文件里叠加写入多段独立JSON,最终导致整个文件非法。如果不需要保留历史内容,用写入模式"w"覆盖即可。
内容的提问来源于stack exchange,提问作者Somdip Dey
相关产品推荐
相关产品推荐

