You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:05:23