Python脚本无法解析TXT文件中的类JSON数据求助
解决Zerodha类JSON数据加载问题
你的数据不是标准JSON,而是Python字典的字符串表示,存在两个核心问题导致加载失败:
- 用单引号代替双引号(JSON要求属性名和字符串必须用双引号)
- 包含
datetime.datetime(...)这种Python原生对象,JSON不支持,ast.literal_eval需要对应类在作用域中才能解析
方法1:用ast.literal_eval正确解析(保留Python对象)
如果需要直接得到包含datetime对象的Python字典列表,只需确保解析时导入datetime类,让ast.literal_eval能识别该对象:
import ast from datetime import datetime # 读取文件内容 with open("your_file.txt", "r", encoding="utf-8") as f: raw_data = f.read() # 解析为Python对象 parsed_data = ast.literal_eval(raw_data) # 验证结果 print(type(parsed_data)) # <class 'list'> print(type(parsed_data[0]["last_trade_time"])) # <class 'datetime.datetime'>
方法2:转换为标准JSON格式
如果需要将数据转为标准JSON(便于跨语言使用),需要先处理datetime对象,再转为JSON:
import ast import json from datetime import datetime def datetime_serializer(obj): """将datetime对象序列化为ISO格式字符串""" if isinstance(obj, datetime): return obj.isoformat() raise TypeError(f"Type {type(obj)} not serializable") # 读取并解析为Python对象 with open("your_file.txt", "r", encoding="utf-8") as f: raw_data = f.read() parsed_data = ast.literal_eval(raw_data) # 转换为标准JSON字符串 json_data = json.dumps(parsed_data, default=datetime_serializer, indent=2) # 保存或使用JSON数据 with open("output.json", "w", encoding="utf-8") as f: f.write(json_data)
为什么之前的方法失败?
json.loads():严格遵循JSON规范,不识别单引号和Python原生对象,所以直接报错ast.literal_eval():如果未导入datetime类,解析时无法识别datetime.datetime构造函数,导致失败;导入后即可正常解析
内容的提问来源于stack exchange,提问作者Loki
相关产品推荐
相关产品推荐

