从API获取数据写入TXT后,读取JSON对象遇单引号问题求助
兄弟,这问题我之前处理JSON数据的时候也踩过坑!核心问题其实是你错误地把单个JSON字符串拼成列表后直接转成字符串写入文件了,而不是把整个数据结构序列化成标准的JSON格式。下面给你两个思路,优先从根源解决,实在不行再修复已有文件:
最优解决方案:从写入阶段避免问题
不要把单个JSON字符串存进列表再转成字符串写入,而是直接把包含原始字典的Python列表,一次性序列化成合法的JSON数组写入文件。这样写入的内容本身就是符合JSON规范的,读取时直接加载就行,完全不会出现单引号的问题。
示例代码:
import json # 假设这是你从API拿到的原始字典列表 api_data = [ {"md1": {"id": 422, "h": "bla"}}, {"md2": {"id": 42211, "h": "bla2"}} ] # 直接把整个列表序列化为JSON写入文件 with open('data.txt', 'w', encoding='utf-8') as f: json.dump(api_data, f, ensure_ascii=False) # 读取时直接加载为Python对象 with open('data.txt', 'r', encoding='utf-8') as f: loaded_data = json.load(f) print(loaded_data) # 输出:[{'md1': {'id': 422, 'h': 'bla'}}, {'md2': {'id': 42211, 'h': 'bla2'}}]
这个方法的好处是完全遵循JSON规范,从根源上杜绝了单引号问题,后续读取也不需要额外处理,是最推荐的做法。
修复已有错误文件的方法
如果已经生成了带有单引号的错误文件,不要直接用字符串替换单引号(万一JSON内容里本身包含单引号,替换会破坏结构),可以用ast.literal_eval安全解析列表,再逐个加载每个JSON字符串:
示例代码:
import json import ast with open('data.txt', 'r', encoding='utf-8') as f: file_content = f.read() # 先把文件中的字符串解析成Python列表(ast.literal_eval比eval安全,不会执行恶意代码) json_str_list = ast.literal_eval(file_content) # 遍历列表,逐个解析每个JSON字符串为字典 loaded_data = [json.loads(item) for item in json_str_list] print(loaded_data)
这个方法可以安全修复已有文件的问题,同时避免破坏JSON内部的合法字符。
内容的提问来源于stack exchange,提问作者arsenal88
相关产品推荐
相关产品推荐

