Python查询Telegram导出JSON消息数据:指定文本与消息ID查询代码失效求助
Python查询Telegram导出JSON消息数据:指定文本与消息ID查询代码失效求助
嗨,我来帮你排查下代码失效的问题~你的代码没跑起来,大概率是因为对Telegram导出的JSON结构理解错了。
Telegram导出的result.json根本不是你假设的「以reply_to_message_id为键、消息文本为值」的字典结构,它的标准格式是包含一个messages数组,每个数组元素是完整的消息对象,里面会有id(消息自身ID)、text(消息内容)、reply_to_message_id(回复的目标消息ID)这些字段。
而且还有个小坑:部分带格式的消息(比如加粗、带链接的内容),text字段会是一个列表,而不是纯字符串,直接用in判断会出错,得先把它转成字符串才行。
下面给你修正后的代码,分别实现「查找含特定文本的消息」和「通过ID查找消息」的功能:
1. 查找包含特定文本的消息
import json # 加载Telegram导出的JSON文件 with open('result.json', encoding="utf8") as f: data = json.load(f) # 取出消息列表(Telegram导出的标准结构里,消息都存在messages字段下) messages = data.get('messages', []) # 你要查找的目标文本 target_text = 'sometext' for msg in messages: # 处理可能为列表的text字段 msg_content = msg.get('text', '') if isinstance(msg_content, list): # 把列表里的内容拼接成纯字符串(兼容带格式的消息) msg_content = ''.join( [item.get('text', item) if isinstance(item, dict) else item for item in msg_content] ) # 判断文本是否匹配 if target_text in msg_content: print(f"找到匹配消息👇") print(f"消息ID:{msg.get('id')}") print(f"消息内容:{msg_content}") print(f"回复的消息ID:{msg.get('reply_to_message_id', '无')}") print("---")
2. 通过消息ID查找消息
import json with open('result.json', encoding="utf8") as f: data = json.load(f) messages = data.get('messages', []) # 你要查找的目标消息ID target_msg_id = 12345 # 替换成实际ID for msg in messages: if msg.get('id') == target_msg_id: # 同样处理可能为列表的text字段 msg_content = msg.get('text', '') if isinstance(msg_content, list): msg_content = ''.join( [item.get('text', item) if isinstance(item, dict) else item for item in msg_content] ) print(f"找到ID为{target_msg_id}的消息👇") print(f"内容:{msg_content}") break else: print(f"未找到ID为{target_msg_id}的消息")
你可以把代码里的target_text和target_msg_id替换成你实际要找的内容,应该就能正常工作啦~
备注:内容来源于stack exchange,提问作者Alexander Bo
相关产品推荐
相关产品推荐

