Python读取DB2中含多余末尾大括号的JSON消息报错求助
JSON解析报错问题排查与解决
问题描述
我是Python新手,从DB2数据库提取JSON格式的MESSAGE_TX列到Pandas DataFrame后,尝试用json.loads()解析为对象时,触发JSONDecodeError("Extra data", s, end)错误。检查发现JSON字符串末尾存在多余的大括号,使用rstrip()处理后仍报错,需要解决方法。
示例查询数据
INSERT_TS MESSAGE_TX 0 2020-06-17 00:41:36.737369 {"ftcId":XXXX,"nbId":XXXX,"Id":XXXXX...
现有代码
conn = ibm_db.connect(db,"","","") pconn = ibm_db_dbi.Connection(conn) bom53rows = pd.read_sql(query, pconn) df = pd.DataFrame(bom53rows) print(df[["MESSAGE_TX"]]) policyMessage = df.at[0, 'MESSAGE_TX'] policyMessage.rstrip() bom03Message = json.loads(policyMessage)
解决步骤
1. 修复rstrip()的使用错误
Python字符串是不可变类型,rstrip()方法会返回处理后的新字符串,不会修改原变量。你之前的代码没有将处理结果赋值,等于没做任何处理。同时要指定去除的目标字符(默认只删空白):
policyMessage = df.at[0, 'MESSAGE_TX'] # 去除末尾所有多余的大括号 cleaned_message = policyMessage.rstrip('}') # 尝试解析 bom03Message = json.loads(cleaned_message)
2. 排查隐藏的多余字符
如果仍报错,先打印字符串末尾的原始内容,确认是否有换行、制表符等隐藏字符:
# 打印最后20个字符的原始状态 print("字符串结尾详情:", repr(policyMessage[-20:]))
如果有其他多余字符,可以一并去除:
# 去除末尾的换行、制表符、空格和大括号 cleaned_message = policyMessage.rstrip('\n\t }') bom03Message = json.loads(cleaned_message)
3. 正则提取合法JSON结构
如果上述方法无效,用正则表达式匹配最外层的JSON结构,提取合法部分:
import re import json policyMessage = df.at[0, 'MESSAGE_TX'] # 匹配从第一个{到最后一个}的完整JSON结构(支持多行) match = re.search(r'^\{.*\}$', policyMessage, re.DOTALL) if match: cleaned_message = match.group() bom03Message = json.loads(cleaned_message) else: print("未找到合法的JSON结构")
内容的提问来源于stack exchange,提问作者Karson074
相关产品推荐
相关产品推荐

